void CGetBitmap::LoadBitmapFromRec(HWND hWnd)
{
HINSTANCE hInstance=GetModuleHandle(NULL);
LPCTSTR lr = MAKEINTRESOURCE(IDB_BANANA);
HDC hdc=GetDC(hWnd);
HDC hdcmem=CreateCompatibleDC(hdc);
HBITMAP bp=LoadBitmap(hInstance,lr);
HBITMAP oldb=(HBITMAP)SelectObject(hdcmem,bp);
BitBlt(hdc,0,0,100,100,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmem,oldb);
DeleteObject(bp);
DeleteObject(oldb);
DeleteDC(hdcmem);
ReleaseDC(hWnd,hdc);
}
在C++中资源是被链接到模块(DLL或EXE)的某块地址空间的内容,因此在调用这块资源时,往往都要求指定DLL或EXE的模块ID:
HBITMAP bp=LoadBitmap(hInstance,lr);
hInstance是这个模块的id,lr是这个资源的名称
但上面的程序在取得这个模块的id使用了
GetModuleHandle(NULL);
这种用法再很多的实例程序中见过,于是会有人把它直接用在自己的项目中,事实上这个函数返回的不是当前模块的ID,而是你的EXE的ID,因此,如果你的资源是在ReadResource.dll中,那么就要写成
GetModuleHandle(_T("ReadResource"));
这样才能正确加载到资源