TBitmap LoadFromResourceName 不起作用

问题描述 投票:0回答:1

我正在使用 C++Builder。我的 .res 文件中有 70 个小位图图像。

我的代码使用 MyBitMap->LoadFromResourceID 可以工作并从 .res 文件加载位图。

    TBitmap *MyBitMap = new Graphics::TBitmap();
    MyBitMap->LoadFromResourceID( (int)HInstance, 2 );
    delete MyBitMap;
    MyBitMap=NULL;

下面的代码使用 MyBitMap->LoadFromResourceName 给出错误“引发异常类 EResNotFound 并显示消息“找不到资源 cp2.bmp”。”

    TBitmap *MyBitMap = new Graphics::TBitmap();
    const UnicodeString MyName = "cp2.bmp";
    MyBitMap->LoadFromResourceName((int)HInstance, MyName );// Error Here
    delete MyBitMap;
    MyBitMap=NULL;

这是我的 .rc 文件的顶部。我已经用 ID 号和文件名设置了所有位图。使用名称加载不起作用。您能否展示如何使用 LoadFromResourceName。谢谢。

99 BITMAP "cp0.bmp"
1 BITMAP "cp1.bmp"
2 BITMAP "cp2.bmp"
3 BITMAP "cp3.bmp"
4 BITMAP "cp4.bmp"
5 BITMAP "cp5.bmp"
6 BITMAP "cp6.bmp"
7 BITMAP "cp7.bmp"
8 BITMAP "cp8.bmp"
9 BITMAP "cp9.bmp"

我尝试了在 Google、Embarcadero Wiki 文档和 ChatGPT 上能找到的所有解决方案。

c++builder tbitmap
1个回答
0
投票

LoadFromResourceName()
失败,因为您的图像资源均未命名为
cp2.bmp
。这只是资源编译器在编译
.res
文件时从中提取图像数据的文件名。您的
.res
中的实际 ID 是 99、1、2、3 等。这就是
LoadFromResourceID()
起作用的原因。

资源不能同时具有数字 ID 和非数字名称,它们可以具有其中之一。

如果您想为资源分配名称,它应该看起来更像这样:

CP0 BITMAP "cp0.bmp"
CP1 BITMAP "cp1.bmp"
CP2 BITMAP "cp2.bmp"
CP3 BITMAP "cp3.bmp"
CP4 BITMAP "cp4.bmp"
CP5 BITMAP "cp5.bmp"
CP6 BITMAP "cp6.bmp"
CP7 BITMAP "cp7.bmp"
CP8 BITMAP "cp8.bmp"
CP9 BITMAP "cp9.bmp"
TBitmap *MyBitMap = new Graphics::TBitmap();
const UnicodeString MyName = _D("CP2");
MyBitMap->LoadFromResourceName((NativeUInt)HInstance, MyName);
delete MyBitMap;
MyBitMap = NULL;

更多详情请参考MSDN:

关于资源文件

资源定义语句

位图资源

© www.soinside.com 2019 - 2024. All rights reserved.