Nếu bạn không thực sự cần một CBitmap, nhưng chỉ có một tay cầm này có thể hữu ích cho bạn.
Hoặc nếu bạn có thể lấy CBitMap từ HBITMAP, hàm này trả về nó cũng tốt.
Tôi sử dụng nó trên một ứng dụng thương mại và nó hoạt động.
// Based on afxbutton.cpp's static function ButtonLoadBitmap
HBITMAP __stdcall ButtonLoadBitmap(UINT uiBmpResId)
{
if (uiBmpResId == 0)
{
return NULL;
}
LPCTSTR lpszResourceName = MAKEINTRESOURCE(uiBmpResId);
ENSURE(lpszResourceName != NULL);
HBITMAP hbmp = NULL;
// Try to load PNG image first:
CPngImage pngImage;
if (pngImage.Load(lpszResourceName))
{
hbmp = (HBITMAP) pngImage.Detach();
}
else
{
HINSTANCE hinstRes = AfxFindResourceHandle(lpszResourceName, RT_BITMAP);
if (hinstRes == NULL)
{
return NULL;
}
UINT uiLoadImageFlags = LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS;
hbmp = (HBITMAP) ::LoadImage(hinstRes, lpszResourceName, IMAGE_BITMAP, 0, 0, uiLoadImageFlags);
}
return hbmp;
}
Lỗi trong LoadFromResource hoặc trong phần đính kèm? – dwo