我使用Visual C ++使用Visual Studio 2012,我一直在尝试从我的资源加载位图 像这样:
HRESULT DemoApp::CreateDIBFromResource(HWND hWnd, HINSTANCE Instance, LPCWSTR ImageID)
{
HRESULT hr = S_OK;
HBITMAP bitmap = (HBITMAP)LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(ImageID));
return hr;
}
并像这样调用函数
if(SUCCEEDED(CreateDIBFromResource(hWnd, NULL, MAKEINTRESOURCE(IDB_BACKGROUND))))
{
InvalidateRect(hWnd, NULL, TRUE);
}
它没有加载任何内容所以我在
处设置了一个断点return hr;
当我将光标悬停在ImageID
上时,表示
ImageID = 0x00000065 Error reading characters of string.
我无法弄清楚问题所在。我启用了Unicode,我不知道是否与它有任何关系。
答案 0 :(得分:1)
MAKEINTRESOURCE是一个将整数转换为字符串的宏。当你拨打CreateDIBFromResource
时,你可以正确使用它,但是然后你再次对结果应用它,这没有任何意义。您应该直接使用ImageID
参数。这同样适用于Instance
参数。
HRESULT DemoApp::CreateDIBFromResource(HWND hWnd, HINSTANCE Instance, LPCWSTR ImageID)
{
HRESULT hr = S_OK;
HBITMAP bitmap = (HBITMAP)LoadBitmap(Instance, ImageID);
return hr;
}
顺便说一下,返回HRESULT
有什么意义?你不应该归还HBITMAP
吗?