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

标签 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???
    }
}

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

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

最佳答案

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

关于c++ - wxWidgets - 如何嵌入 .ico 和 .png 图像并用于绘制工具栏项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361543/

相关文章:

c++ - 在 wxwidget 应用程序中使用 boost asio 编译错误

c++ - 从基类对象创建派生类

c++ - sprintf '+' 字符不打印

c++ - 为什么 `i =++i + 1` 未指定行为?

visual-studio - 如何在TableAdapter配置向导的SQL语句中使用等宽字体?

c++ - 未能构建 codeblocks smith wxWidget 项目

c++ - C++ 中的字符数组损坏

.net - 如何将 JsHint ".jshintrc"文件与 Visual Studio 2013 Web Essentials 扩展一起使用?

c# - 创建 MVC 核心应用程序后是否可以更改调试配置文件?

wxwidgets - 如何在 wxWidgets wxHtmlWindow 中设置链接的颜色?