wxWidgets的资源读取

在VC下使用资源,通常都是先在resource.h中定义一个整数,比如:

#define IDI_LIGHTNING_R 200 // 程序图标

然后在resource.rc中定义这个图标:

IDI_LIGHTNING_R ICON "icons\\lightning_r.ico"

读取图标的时候则用:

::LoadIcon(h, MAKEINTRESOURCE(IDI_LIGHTNING_R));

这样的形式。用wxWidgets也想当然地这样做了,结果用

pMainWnd->SetIcon(wxICON(IDI_LIGHTNING_R));

无论如何不起作用。

看了下wxWidgetes代码:

#define wxICON(X) wxIcon(wxT(#X))

直接将IDI_LIGHTNING_R转换成了一个字符串,调用wxIcon的构造函数。

wxIcon::wxIcon(const wxString& iconfile,
long flags,
int desiredWidth,
int desiredHeight)

{
LoadFile(iconfile, flags, desiredWidth, desiredHeight);
}

往下看LoadFile:

bool wxIcon::LoadFile(const wxString& filename,
long type,
int desiredWidth, int desiredHeight)
{
UnRef();

wxGDIImageHandler *handler = FindHandler(type);

if ( !handler )
{
// load via wxBitmap which, in turn, uses wxImage allowing us to
// support more formats
wxBitmap bmp;
if ( !bmp.LoadFile(filename, type) )
return false;

CopyFromBitmap(bmp);
return true;
}

return handler->Load(this, filename, type, desiredWidth, desiredHeight);
}

嗯,查找读取图标的Handler,然后用它来完成实际操作,图标的Handler由wxICOResourceHandler这个类来完成,看其Load方法:

virtual bool Load(wxGDIImage *image,
const wxString& name,
long flags,
int desiredWidth, int desiredHeight)
{
wxIcon *icon = wxDynamicCast(image, wxIcon);
wxCHECK_MSG( icon, false, _T("wxIconHandler only works with icons") );

return LoadIcon(icon, name, flags, desiredWidth, desiredHeight);
}

时间: 2024-11-05 17:33:29

wxWidgets的资源读取的相关文章

2-scala文件操作--自动关闭打开的资源,读取properties文件

简介 使用scala的loan pattern自动关闭打开的资源 读取properties文件 依赖的jar 使用scala_arm库自动关闭资源文件时,需要引入以下依赖: <dependency> <groupId>com.jsuereth</groupId> <artifactId>scala-arm_${scala.binary.version}</artifactId> <version>1.4</version>

如何使用DLL中的资源

长久以来,把界面的信息单独存为一个DLL一直是很多商业软件的作法,比如VC.InstallShield等等,这样做的好处是,如果要做多语言版本,只要写出不同的DLL来,在主程序中使用时调用不同的DLL就行,当然现在还有一种流行的方法是使用INI,读存也非常方便.最近在网上转了转,发现竟没有一篇关于如何读取DLL中资源的文章,虽然Iczelion的Win32ASM教程中第26课"Splash Screen"讲到了读取DLL中的图片,但不知是这种问题太简单了还是其它什么原因,Iczelio

如何让ASP.NET默认的资源编程方式支持非.ResX资源存储

之前写了两篇文章<.NET资源并不限于.ResX文件>(上篇.下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式.在那篇文章中,我定义了三种基于独立文件的ResourceManager(ResXResourceManager.BinaryResourceManager和XmlResoureManager)分别实现对.ResX,.Resource和.xml三种资源文件的访问.在本篇文章中我们将实现自定义ResourceManager和ASP.NET之间的集成,让

.NET(C#):浅谈程序集清单资源和RESX资源

原文:.NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceManager解析二进制资源文件 小看RESX资源文件的Designer.cs文件     返回目录 程序集清单资源 在程序集中嵌入资源的最简单方法是什么?那就是使用Visual Studio中的"嵌入式资源(Embedded Resource)"创建选项,相当于使用csc的"/r

关于c#的资源的读写的,还是不明白其操作逻辑

问题描述 搜索了网上很多,基本上是类似下面这样的操作写:ResourceWriterrw=newResourceWriter("My.resources");Imageokon=Image.FromFile("ok-on.png");rw.AddResource("ok-on.png",okon);rw.Generate();rw.Close();读://ResourceManager构造的第一个参数,有的说是"My",也测了

MFC的dll中控制资源问题

有程序EXE和DLL,其中DLL中有1个函数用来显示对话框,被EXE调用.当EXE和DLL都为Release或Debug时,没有任何问题,但EXE为Release.DLL为Debug时,就会出错.该DLL是用VC提供的MFC Extension DLL,函数的代码如下:HINSTANCE hInstOld = AfxGetResourceHandle(); // 该句出错HINSTANCE hInstNew = GetModuleHandle("T01Test.dll");AfxSet

关于RSS节点数据读取的一些疑惑

问题描述 最近完成了一些简单的rss资源读取但下面这个情况让我以后-<title>-疤痕修复:忘记不愉快的往事</title>(这种能正常的读取内容)-<title>-<![CDATA[疤痕修复:忘记不愉快的往事]]></title>==============================(这种读取出来就是空的了)我的读取操作如下:先读取到节点title,然后取节点的值用的"InnerText"麻烦那位大哥清楚的给一些指点

一起谈.NET技术,如何让ASP.NET默认的资源编程方式支持非.ResX资源存储

之前写了两篇文章<.NET资源并不限于.ResX文件>(上篇.下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式.在那篇文章中,我定义了三种基于独立文件的ResourceManager(ResXResourceManager.BinaryResourceManager和XmlResoureManager)分别实现对.ResX,.Resource和.xml三种资源文件的访问.在本篇文章中我们将实现自定义ResourceManager和ASP.NET之间的集成,让

如何让ASP.NET默认的资源编程“.NET研究”方式支持非.ResX资源存储

之前写了两篇文章<.NET资源并不限于.ResX文件>(上篇.下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式.在那篇文章中,我定义了三种基于独立文件的ResourceManager(ResXResourceManager.BinaryResourceManager和XmlResoureManager)分别实现对.ResX,.Resource和.xml三种资源文件的访问.在本篇文章中我们将实现自定义ResourceManager和ASP.NET之间的集成,让