-1

我使用 Visual Studio 2012 使用 Visual C++,我一直在尝试从我的资源中加载位图,如下所示:

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,但我不知道这是否与它有关。

4

1 回答 1

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;
}

顺便说一句,返回 a 有什么意义HRESULT?不应该退货HBITMAP吗?

于 2013-06-14T07:48:53.383 回答