0

我已经基于类TCustomControl派生了我自己的组件。我需要嵌入到以 .png 格式存储的组件位图资源中。我在项目文件resources.rc中添加了以下内容:

AP_LOGO RCDATA .\AP_logo_RGB_transparent.png

编译成功。组件静态链接到项目。当我运行应用程序时,它会在尝试访问嵌入式资源时引发以下错误:

Project raised exception class EResNotFound with message 'Resource AP_LOGO not found'.

源代码中的以下行访问位图资源:

  Graphics::TBitmap *bmp = new Graphics::TBitmap();
  HINST handle = FindClassHInstance(__classid(TVctDiag2));
  bmp->LoadFromResourceName(handle, L"AP_LOGO"); // <----- exception apppers there

当我使用资源编辑器打开可执行文件时,没有任何名为“AP_LOGO”的资源。为什么?

4

1 回答 1

0

它不起作用,因为这些TBitmap::LoadFromResource...()方法BITMAP只查找资源,但是您已经定义了一个RCDATA资源。如果您不更改资源类型,那么您将不得不使用TResourceStream,例如:

HINST handle = FindClassHInstance(__classid(TVctDiag2));
TResourceStream *strm = new TResourceStream(handle, L"AP_LOGO", RT_RCDATA);
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->LoadFromStream(strm);
delete strm;

使用该 saif,您无法将 PNG 资源加载到 aTBitmap中。如果您必须使用 PNG 资源,那么您必须使用 PNG 类,例如TPngImage.

于 2012-09-24T20:03:52.913 回答