我试图使用LoadBitmap从资源文件加载图像。
我已经验证了资源是正确链接的--使用十六进制编辑器检查最终的EXE,显示位图被正确地打包在EXE中。
我还验证了位图是有效的--使用LoadImage和LR_LOADFROMFILE在运行时从磁盘加载位图很好,稍后我在将它添加到gui元素时会看到它。
我已经验证了用于访问资源的ID也是有效的-- FindResource函数查找资源,SizeofResource为位图打印准确的预期字节数。
因此,我有一个有效的链接资源、一个有效的ID和一个可加载的位图。
但是,如果我从资源而不是从磁盘加载,LoadBitmap返回NULL,LoadImage也会返回NULL。GetLastError返回0。
有什么想法吗?我是否正确地在RT_BITMAP中定义了resource.rc?
谢谢。
Resourcee.h
#define BMP_TEST_ID 2resource.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 64-mingw32msvc-gcc 4.6.3
发布于 2013-08-29 02:14:48
首先,您根本不必定义RT_BITMAP。它已经通过winuser.h定义为包含在您的c/cpp文件中。结果发现你在你的资源文件中并不需要它。
BITMAP资源类型将为位图文件正确分配正确的资源类型id。将位图资源声明更改为:
BMP_TEST_ID BITMAP "TEST24.BMP" 你应该可以走了。
https://stackoverflow.com/questions/18501199
复制相似问题