我正在尝试使用LoadBitmap从资源文件中加载图像。
我已经验证资源链接正确——使用十六进制编辑器检查最终的 EXE 显示位图正确打包在 EXE 中。
我还验证了该位图是有效的——使用 LoadImage 和 LR_LOADFROMFILE 在运行时从磁盘加载位图工作正常,当我稍后将它添加到 gui 元素时,我看到它出现了。
我已经验证了我用来访问资源的 ID 也是有效的—— FindResource 函数找到资源,并且 SizeofResource 打印位图的确切预期字节数。
所以我有一个有效的链接资源、一个有效的 ID 和一个可加载的位图。
但是,如果我从资源而不是磁盘加载,LoadBitmap 返回 NULL,LoadImage 也是如此。GetLastError 返回 0。
有任何想法吗?我在resource.rc 中#defining RT_BITMAP 是否正确?
谢谢。
资源.h
#define BMP_TEST_ID 2
资源.rc
#include "resource.h" // defines BMP_TEST_ID
#define RT_BITMAP 2
BMP_TEST_ID RT_BITMAP "TEST24.BMP"
测试.c
#include <windows.h> // defines RT_BITMAP as MAKEINTRESOURCE(2)
#include "resource.h" // defines BMP_TEST_ID
HINSTANCE instance = GetModuleHandle(NULL);
if (!instance) { /* handle error */ }
/* find a bitmap resource with the ID we want -- OK! */
HRSRC rsc = FindResource(instance, RT_BITMAP, MAKEINTRESOURCE(BMP_TEST_ID));
if (!rsc) { /* handle error */ }
/* prints the exact size of the found resource -- GIVES CORRECT OUTPUT */
printf("SizeofResource: %d\n", (int) SizeofResource(instance, rsc));
// ***** THIS BIT DOESN'T WORK *****
/* load bitmap resource -- FAIL! */
HBITMAP bitmap = (HBITMAP)LoadBitmap(instance, MAKEINTRESOURCE(BMP_TEST_ID));
if (!bitmap) { /* handle error */ }
/* load bitmap from file -- OK! */
HBITMAP bitmap2 = (HBITMAP)LoadImage (NULL, "TEST24.BMP", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (!bitmap2) { /* handle error */ }
我的编译器是 amd64-mingw32msvc-gcc 4.6.3