bool LoadBmpPic(const CString strBmpPath, CBitmap &bmp)
{
HBITMAP bitmap;
try
{
bmp.Detach();
bitmap = (HBITMAP)::LoadImage(NULL,strBmpPath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE);
if (bmp.Attach(bitmap))
return true;
}
catch(...)
{
return false;
}
return true;
}
///////////////////////////////////////////
//////////////////////////////////////////////////////////////
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap bmBkgnd, *pOldBitmap = NULL;
HBITMAP bitmap;
BITMAP bm;
bmBkgnd.Detach();
bitmap = (HBITMAP)::LoadImage(NULL,strPath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE);
//bitmap = (HBITMAP)::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_WAITPIC));
bmBkgnd.Attach(bitmap);
pOldBitmap = memdc.SelectObject(&bmBkgnd);
bmBkgnd.GetBitmap(&bm);
////////////////////////////////////////////////////////////////
下面分MFC和SDK两种方式讨论LoadBitmap的问题。
1、如果采用MFC方式,可以使用 AfxGetResourceHandle保存当前的资源文件句柄,即你说的hInst。也可以使用AfxSetResourceHandle设置资源DLL的句柄,如:
hDll=LoadLibrary("ResourceDLL.dll");
if(hDll==NULL)
AfxMessageBox("Can't Load the library");
else AfxMessageBox("success");
AfxSetResourceHandle(hDLL);
...
}
这样以后你再使用LoadBitmap时,图片将来自你的资源DLL,而不是.exe文件。如果你在程序中还要使用.exe中的资源,你需要在 AfxSetResourceHandle之前,先使用 AfxGetResourceHandle保存当前的资源文件句柄。
2、SDK方式。在WinMain中,第一个参数都是HINSTANCE。你也可以LoadLibrary获得的句柄。
我估计你要从硬盘上读取图片,可以参考QA000913 "如何打开、读入、显示和保存BMP文件"、QA002959 "TC中如何编程装入并显示一幅BMP,PCX,JPG等位图图象"。