我有一个用Visual Studio创建的资源文件,我正在使用C++ Builder,示例条目:IDI_ICON1 ICON "filename.ico"
我尝试将它加载到TImageCollection
中,使用"101"
和"IDI_ICON1"
中的值,因为MAKEINTRESOURCE()
不能作为参数提供,但它不起作用。下面的Add()
也不起作用,说没有找到。
for (UINT i=IDI_USER_ICON_START; i<=IDI_USER_ICON_END; i++) {
String resname=String::Format("IDI_ICON%u", ARRAYOFCONST((i-(IDI_USER_ICON_START-1))));
//ImageCollection->Add(resname, reinterpret_cast<NativeUInt>(HInstance), resname);
ImageCollection->Add(resname, reinterpret_cast<NativeUInt>(HInstance), String::Format("%u",ARRAYOFCONST((i))));
}
如何加载带有数字名称的ICON
资源?
1条答案
按热度按时间9rygscc11#
MAKEINTRESOURCE()
只是将一个整数值原样转换为一个字符指针。当直接使用Win32FindResource()
API时,这很好用,因为它接受这样的字符指针作为资源名称。但是,这不适用于任何采用Delphi风格的String
作为资源名称的东西,因为String
需要一个字符指针指向一个C风格的空终止字符串,这不是MAKEINTRESOURCE()
返回的指针类型。所以,要做你想做的事,你有两个选择:
FindResource()
文档,以"#<ID>"
字符串格式指定数字资源ID,例如:Add()
需要RCDATA
资源而不是ICON
资源-我现在无法验证),则使用Add()
的重载,该重载接受TStream
而不是资源名称。然后您可以向其传递TResourceStream
,它具有接受数字资源ID和资源类型的构造函数,例如: