C ++ Builder XE2 - 将资源与组件链接

时间:2012-09-24 06:54:56

标签: embedded-resource custom-component c++builder-xe2

我基于类 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”的资源。为什么呢?

1 个答案:

答案 0 :(得分: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资源加载到TBitmap开头。如果您必须使用PNG资源,则必须使用PNG类,例如TPngImage