wxWidgets - 如何嵌入.ico和.png图像并用于绘制工具栏项

时间:2012-09-11 01:27:05

标签: c++ visual-studio wxwidgets

我想创建工具栏项并从程序内存中的图像中绘制它们,而不是从磁盘上的文件中绘制它们。我更喜欢使用资源文件(.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文件确实有意义。这将允许访问某些库存游标等,默认情况下可在其他平台上使用。

2 个答案:

答案 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