FindResource工作,LoadBitmap没有,LoadImage来自磁盘工作

时间:2013-08-29 02:04:35

标签: c winapi bitmap cross-compiling embedded-resource

我正在尝试使用LoadBitmapresource file加载图片。

我已经验证资源是否正确链接 - 使用十六进制编辑器检查最终的EXE显示位图正确地打包在EXE中。

我还验证了位图是有效的 - 使用带有LR_LOADFROMFILE的LoadImage在运行时从磁盘加载位图工作正常,我看到它在以后添加到gui元素时出现。

我已经验证了我用来访问资源的ID也是有效的 - FindResource函数找到资源,而SizeofResource打印出位图的确切预期字节数。

所以我有一个有效的链接资源,一个有效的ID和一个可加载的位图。

但是,LoadBitmap返回NULL,如果我从资源而不是从磁盘加载,则返回LoadImage。 GetLastError返回0.

有什么想法吗?我正确地在resource.rc中定义RT_BITMAP吗?

感谢。

RESOURCE.H

#define     BMP_TEST_ID         2

RESOURCE.RC

#include "resource.h" // defines BMP_TEST_ID
#define     RT_BITMAP           2 

BMP_TEST_ID RT_BITMAP "TEST24.BMP"

test.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

1 个答案:

答案 0 :(得分:2)

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

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

BMP_TEST_ID BITMAP "TEST24.BMP" 

你应该好好去。