在wxWidgets中使用嵌入在可执行文件中的静态图像资源要比VC6中的使用稍微麻烦一点。其中需要一个工具,wxrc,该工具用于将资源文件.xrc文件转换为C++可以直接访问的文件。wxrc随着wxWidgets包一起发布了,位于utils目录下,一起发布的是源代码,自己编译一下就ok了。另外说一句,xrc文件就是一个普通的xml文件,该文件的格式可以如下:
我将它保存为bg.xrc。注意:图片要和该文件位于同一目录内。
具体的文件格式可以参看这篇文章:
在使用wxrc中我发现,它在对资源进行压缩时使用的是zip,但是,现在有很多人使用的是winrar,没有关系,我们可以自己修改源代码(其实我本人使用的就是winrar)。
用vc6打开wxrc的工程文件,在XmlResApp类中找到MakePackageZIP函数,将
int execres = wxExecute(wxT("zip -9 -j ") +
wxString(flagVerbose ? wxT("\"") : wxT("-q \"")) +
parOutput + wxT("\" ") + files, true);
替换为
int execres = wxExecute(wxT("winrar a -afzip ") + wxString(wxT("\"")) +
parOutput + wxT("\" ") + files, true);
其实就是替换了压缩工具和它的命令行参数。注意,winrar的安装目录一定要在环境变量Path中,还有不要使用那个命令行工具rar.exe,它不支持-af开关。
重新编译wxrc,将wxrc所在的目录加入Path环境变量中。
在Windows命令行下,进入我们自己的工程目录,输入命令:
wxrc /c /o bg.h bg.xrc
此时会在工程目录内生成一个bg.h头文件,打开自己看看吧。注意:不要修改bg.h文件中的内容。只要将其加入到我们的工程中就行了。
如何使用呢?
在wxApp的派生类MyApp(应用程序派生类的名称自己定)的OnInit()函数中进行如下调用就行了。
bool MyApp::OnInit()
{
wxImage::AddHandler(new wxJPEGHandler); // 必须的
wxXmlResource::Get()->InitAllHandlers(); // 必须的
InitXmlResource(); // 必须的,该函数位于wxrc生成的bg.h中
MyFrame* frame = new MyFrame(wxT(""));
frame->Show(true);
SetTopWindow(frame);
return true;
}
此后如果需要加载资源的话,就进行如下调用:
wxBitmap = m_bitmap = wxXmlResource::Get()->LoadBitmap(wxT("freebsd"));
怎么样,简单吧。
下面附上一个示例的源代码,该示例演示了如何使用内嵌的图像资源,并使用该图像作为整个窗口的外形,即不规则窗口的使用。该程序在VC++6.0中编译通过
|
文件: |
ShapeWindow.rar |
大小: |
58KB |
下载: |
下载 | |
阅读(3244) | 评论(0) | 转发(0) |