1

我想创建工具栏项并从程序内存中的图像而不是磁盘上的文件中绘制它们。我更喜欢使用资源文件 (.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???
    }
}

编辑:好的,我会让它更容易。忘记重新缩放。我可以用 Gimp 图片编辑器做到这一点。假设图像大小合适。您还可以假设它们是 .ico 或任何便于 wxWidgets 使用的格式。

编辑 2:我正在接受一个答案,但我决定最好只是“手动”嵌入图像,完全避免 .rc 概念。我写了一个小程序来创建一个带有静态初始化器的 .cpp 文件,但是可以在网上找到它们。当编译到程序中时,.cpp 文件会在只读存储器中创建映像文件的副本。.rc 文件是 Windows 特定的东西,因此最好避免将其用于自定义图标和光标,以实现可移植性。但是,在 MS 项目中有一个 .rc 文件确实有意义,该文件只包含“#include <wx/msw/wx.rc>”行,这将允许访问一些默认情况下可用的库存游标等在其他平台上。

4

2 回答 2

1

不支持从 wx 本身的资源中加载 PNG,但在您的代码中很容易做到这一点,请参阅http://wiki.wxwidgets.org/Embedding_PNG_Images#Embedding_PNG_images_into_Windows_rc_file

于 2012-09-11T10:23:43.010 回答
1

位图和图标概述对此给出了很好的解释。基本上,一旦您将资源嵌入到 .rc 文件中,您需要做的就是:

wxBitmap bmp(wxBITMAP(bmpnameinrcfile));

同样对于 ico

wxIcon icon(wxICON(iconameinrcfile));
于 2012-09-11T07:30:16.663 回答