3

我正在尝试使用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

4

1 回答 1

2

首先,您根本不需要定义RT_BITMAP。它已经被定义winuser.h为包含在您的 c/cpp 文件中。事实证明,无论如何您的资源文件中都不需要它。

BITMAP资源类型将为您的位图文件正确分配正确的资源类型 ID 。将您的位图资源声明更改为:

BMP_TEST_ID BITMAP "TEST24.BMP" 

你应该很高兴。

于 2013-08-29T02:14:48.667 回答