有三个问题,急,给100分 1:如何用VC在客户区加载硬盘上的BMP图象?2:如何用VC调用EXCEL页中的数据?3:如何使EXCEL里的数据自动更新?(前两个问题最好给出源代码) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1. LoadImage2. 用EXCEL关键字搜索一下,有很多 HBITMAP hBmp;hBmp = (HBITMAP)LoadImage( NULL, "C:\\pig.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR |LR_LOADFROMFILE |LR_CREATEDIBSECTION ); void COleadoDlg::ShowPhoto(){// CClientDC hdc(this); HDC hdc;// CDC *hdc; hdc=::GetDC(m_Show.m_hWnd); CRect m_picture; m_Show.GetClientRect(m_picture); // ::GetClientRect(m_Show.m_hWnd,m_picture); int xpos=m_picture.left; int ypos=m_picture.top; int Widthpos=m_picture.Width(); int heightpos=m_picture.Height(); int bmpwidth,bmpheight,size,nclr; long filesize; CFile f; CFileException e; long count; HGLOBAL hfilemem; HGLOBAL hpalmem; char *lmem; LPBITMAPINFO lpbmi; LPLOGPALETTE lplogpal; HPALETTE hpal; const void *lpbit; if(!f.Open(m_PhotoPath,CFile::modeRead,&e)) { AfxMessageBox("打开文件错误!"); return; } f.SeekToBegin(); filesize=f.GetLength(); hfilemem=GlobalAlloc(GMEM_MOVEABLE,(filesize)); if(!hfilemem) { ::AfxMessageBox("内存不够!"); return; } lmem=(char *)GlobalLock(hfilemem); if(lmem==(LPSTR)NULL)return; f.SeekToBegin(); if(filesize<64*1024) { count=f.Read(lmem,filesize); } else { count=f.Read(lmem,filesize); } if(count!=filesize) { ::AfxMessageBox("数据错误"); return; } f.Close(); size=*(LPINT)(lmem+10); lpbit=lmem+size; lpbmi=(LPBITMAPINFO)(lmem+14); bmpwidth=(lpbmi->bmiHeader.biWidth); bmpheight=lpbmi->bmiHeader.biHeight; RECT Rectangle; Rectangle.left=0; Rectangle.top=0; Rectangle.right=bmpwidth; Rectangle.bottom=bmpheight; switch(lpbmi->bmiHeader.biBitCount) { case 1: nclr=2; break; case 4: nclr=16; break; case 8: nclr=256; break; case 24: nclr=0; break; default: nclr=16; break; } hpalmem=GlobalAlloc(GMEM_MOVEABLE,sizeof(LOGPALETTE)+(sizeof(PALETTEENTRY))*nclr); if(!hpalmem) { ::AfxMessageBox("内存不够!"); return; } lplogpal=(LPLOGPALETTE)GlobalLock(hpalmem); lplogpal->palVersion=0x300; lplogpal->palNumEntries=nclr; for(int i=0;i<nclr;i++) { lplogpal->palPalEntry[i].peRed=lpbmi->bmiColors[i].rgbRed; lplogpal->palPalEntry[i].peGreen =lpbmi->bmiColors[i].rgbGreen; lplogpal->palPalEntry[i].peBlue =lpbmi->bmiColors[i].rgbBlue; } hpal=CreatePalette(lplogpal); GlobalUnlock(hpalmem); GlobalFree(hpalmem); SelectPalette(hdc,hpal,0); RealizePalette(hdc); if(!StretchDIBits(hdc,xpos,ypos,Widthpos,heightpos,0,0,bmpwidth,bmpheight,lpbit,lpbmi,DIB_RGB_COLORS,SRCCOPY)) { ::AfxMessageBox("展开图形时出错!"); } DeleteObject(hpal); GlobalUnlock(hfilemem); GlobalFree(hfilemem);// ReleaseDC(&hdc);} 用用ACTIVEX中的自动化技术太长了,在VC++技术内幕第四版 ahr(电磁波)说的很对第一个问题,先读出文件的数据,然后画在客户区。第二个问题,创建一个EXCEL对象。第三个问题,通过第二个问题解决。 请教VC中程序语句的含义... 关于画刷的菜鸟问题 ▲▲▲请问CryptLib加密算法库可以用于商业软件吗?▲▲▲ 请帮助解释一下? 求助!在线等待100分!利用系统钩子取得虚拟键值问题 (vc中)如何在一个应用程序中激活(启用)另一个应用程序? 一个在桌面上产生雪花的小程序,请帮忙修改。 200分请教两个关于API的问题。 vc中数据库编程中使用SQL语句时,如何表示“select * from table where "中的where 如何使工具条的背景色为渐变色(在线等待解决方案)。 谁能告诉我,我的程序错在哪里? ACCESS数据库编程及加密
2. 用EXCEL关键字搜索一下,有很多
hBmp = (HBITMAP)LoadImage( NULL,
"C:\\pig.bmp",
IMAGE_BITMAP,
0,
0,
LR_DEFAULTCOLOR |LR_LOADFROMFILE |LR_CREATEDIBSECTION
);
{
// CClientDC hdc(this);
HDC hdc;
// CDC *hdc;
hdc=::GetDC(m_Show.m_hWnd);
CRect m_picture;
m_Show.GetClientRect(m_picture);
// ::GetClientRect(m_Show.m_hWnd,m_picture);
int xpos=m_picture.left;
int ypos=m_picture.top;
int Widthpos=m_picture.Width();
int heightpos=m_picture.Height();
int bmpwidth,bmpheight,size,nclr;
long filesize;
CFile f;
CFileException e;
long count;
HGLOBAL hfilemem;
HGLOBAL hpalmem;
char *lmem;
LPBITMAPINFO lpbmi;
LPLOGPALETTE lplogpal;
HPALETTE hpal;
const void *lpbit; if(!f.Open(m_PhotoPath,CFile::modeRead,&e))
{
AfxMessageBox("打开文件错误!");
return;
}
f.SeekToBegin();
filesize=f.GetLength();
hfilemem=GlobalAlloc(GMEM_MOVEABLE,(filesize));
if(!hfilemem)
{
::AfxMessageBox("内存不够!");
return;
}
lmem=(char *)GlobalLock(hfilemem);
if(lmem==(LPSTR)NULL)return;
f.SeekToBegin();
if(filesize<64*1024)
{
count=f.Read(lmem,filesize);
}
else
{
count=f.Read(lmem,filesize);
}
if(count!=filesize)
{
::AfxMessageBox("数据错误");
return;
}
f.Close();
size=*(LPINT)(lmem+10);
lpbit=lmem+size;
lpbmi=(LPBITMAPINFO)(lmem+14);
bmpwidth=(lpbmi->bmiHeader.biWidth);
bmpheight=lpbmi->bmiHeader.biHeight;
RECT Rectangle;
Rectangle.left=0;
Rectangle.top=0;
Rectangle.right=bmpwidth;
Rectangle.bottom=bmpheight;
switch(lpbmi->bmiHeader.biBitCount)
{
case 1:
nclr=2;
break;
case 4:
nclr=16;
break;
case 8:
nclr=256;
break;
case 24:
nclr=0;
break;
default:
nclr=16;
break;
}
hpalmem=GlobalAlloc(GMEM_MOVEABLE,sizeof(LOGPALETTE)+(sizeof(PALETTEENTRY))*nclr); if(!hpalmem)
{
::AfxMessageBox("内存不够!");
return;
}
lplogpal=(LPLOGPALETTE)GlobalLock(hpalmem);
lplogpal->palVersion=0x300;
lplogpal->palNumEntries=nclr;
for(int i=0;i<nclr;i++)
{
lplogpal->palPalEntry[i].peRed=lpbmi->bmiColors[i].rgbRed;
lplogpal->palPalEntry[i].peGreen =lpbmi->bmiColors[i].rgbGreen;
lplogpal->palPalEntry[i].peBlue =lpbmi->bmiColors[i].rgbBlue;
}
hpal=CreatePalette(lplogpal);
GlobalUnlock(hpalmem);
GlobalFree(hpalmem);
SelectPalette(hdc,hpal,0);
RealizePalette(hdc);
if(!StretchDIBits(hdc,xpos,ypos,Widthpos,heightpos,0,0,bmpwidth,bmpheight,lpbit,lpbmi,DIB_RGB_COLORS,SRCCOPY))
{
::AfxMessageBox("展开图形时出错!");
}
DeleteObject(hpal);
GlobalUnlock(hfilemem);
GlobalFree(hfilemem);
// ReleaseDC(&hdc);
}
第一个问题,先读出文件的数据,然后画在客户区。
第二个问题,创建一个EXCEL对象。
第三个问题,通过第二个问题解决。