使用MAKEINTRESOURCE使用LoadBitmap时出错

时间:2013-06-14 06:30:19

标签: visual-c++

我使用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,我不知道是否与它有任何关系。

1 个答案:

答案 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吗?