我想创建工具栏项并从程序内存中的图像中绘制它们,而不是从磁盘上的文件中绘制它们。我更喜欢使用资源文件(.rc)嵌入图像,但如果我需要以某种方式滚动我自己也可以。
图像文件是.ico和.png。
假设我可以使用.rc文件中的内容,我该如何完成此代码?
void MyFrame::AddToolBarItem(int ID, wxSize sz, const char* file, const char* short_help, const char *long_help) {
const char *end = file+strlen(file);
const char *dot = std::find(file, end, '.');
if(dot != end) {
// It's an external file, with an extention, like .ico or .png
wxImage im(file);
im.Rescale(sz.x, sz.y, wxIMAGE_QUALITY_HIGH);
wxBitmap bmp(im);
my_tool_bar->AddTool(ID, short_help, bmp, long_help);
} else {
// It's a resource
// What now, StackOverflow???
}
}
编辑:好的,我会让它变得更容易。忘掉Rescale吧。我可以用Gimp图片编辑器做到这一点。假设图像尺寸合适。您也可以假设它们是.ico或wxWidgets方便的任何格式。
编辑2:我接受了答案,但我认为最好只是“手动”嵌入图像,完全避免.rc概念。我写了一个小程序来创建一个带有静态初始化器的.cpp文件,但是可以在网上找到它们。编译到程序中时,.cpp文件会在只读内存中创建映像文件的副本。 .rc文件是Windows特有的,因此最好避免将其用于自定义图标和游标,以实现可移植性。但是,在MS项目中只包含“#include< wx / msw / wx.rc>”行的.rc文件确实有意义。这将允许访问某些库存游标等,默认情况下可在其他平台上使用。
答案 0 :(得分:1)
Bitmaps and Icons overview给出了很好的解释。基本上,一旦将资源嵌入.rc文件中,您只需要:
wxBitmap bmp(wxBITMAP(bmpnameinrcfile));
同样适用于ico
wxIcon icon(wxICON(iconameinrcfile));
答案 1 :(得分:1)
不支持从wx本身的资源加载PNG,但在代码中很容易实现,请参阅http://wiki.wxwidgets.org/Embedding_PNG_Images#Embedding_PNG_images_into_Windows_rc_file