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