【问题标题】:ImageList_LoadImage doesn't find bitmapImageList_LoadImage 找不到位图
【发布时间】:2017-05-17 12:33:24
【问题描述】:

尝试使用 ImageList_LoadImage 加载位图,但失败并显示 ErrorCode 1814 - Could not find resource 然而,它前面的这些行是有效的

HRSRC myResource = FindResource(NULL, MAKEINTRESOURCE(IDB_BITMAP1), RT_BITMAP);
auto imageResDataHandle = LoadResource(NULL, myResource);
TRACE("Error %d", GetLastError()); // All OK

auto hImageList = ::ImageList_LoadImage(NULL, MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, CLR_DEFAULT, IMAGE_BITMAP, 0); 
TRACE("Error %d", GetLastError()); // Fail, error code 1814

该文件是一个 32x16 bmp 文件,另存为“bitmap1.bmp”作为在 VS 中创建的资源。

当它在第一行找到资源时,我认为它已编译成二进制文件。

【问题讨论】:

  • 这是因为您使用NULL 作为ImageList_LoadImage 的第一个参数hi - 只需重新阅读文档。你需要ImageList_LoadImage(GetModuleHandle(NULL), ..
  • 谢谢你的工作。抱歉,我错过了文档中的内容

标签: c++ winapi bitmap


【解决方案1】:

我假设通过这个电话

auto hImageList = ::ImageList_LoadImage(NULL, MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, CLR_DEFAULT, IMAGE_BITMAP, 0);

您假设HINSTANCENULL 值将使函数搜索当前模块。根据documentation,此功能并非如此。

要获取当前模块的HINSTANCE,可以调用GetModuleHandle(NULL)。用该调用替换代码中的NULL,它应该可以工作。

auto hImageList = ::ImageList_LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, CLR_DEFAULT, IMAGE_BITMAP, 0);

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2016-10-03
    • 1970-01-01
    • 2020-05-12
    • 2020-11-24
    • 2017-01-20
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多