gpt4 book ai didi

c - FindResource 工作,LoadBitmap 不工作,从磁盘工作的 LoadImage

转载 作者:行者123 更新时间:2023-12-04 10:49:48 24 4
gpt4 key购买 nike

我正在尝试使用 LoadBitmapresource file 加载图像.

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

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

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

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

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

有什么想法吗?我是否正确地在 resource.rc 中#defining RT_BITMAP?

谢谢。

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

最佳答案

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

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

BMP_TEST_ID BITMAP "TEST24.BMP" 

你应该可以开始了。

关于c - FindResource 工作,LoadBitmap 不工作,从磁盘工作的 LoadImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18501199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com