为 wxAuiToolBar 添加我自己的图标

Adding my own Icon for wxAuiToolBar

我想向 wxAuiToolBar 添加一个按钮,显示我自己创建的图标(我将其作为文件 myicon.png,分辨率为 24x24)。

到目前为止,我最好的办法是转换为 bmp 文件并为 wxsmith 使用以下代码:

<wxsmith>
    <object class="wxFrame" name="MyFrame">
        <size>800,640</size>
        <object class="wxAuiManager" variable="aui_manager" member="yes">
            <object class="AuiManagerItem">
                <object class="wxAuiToolBar" name="ID_AUITOOLBAR" variable="toolbar" member="yes">
                    <pos>90,3</pos>
                    <object class="AuiToolBarItem">
                        <object class="wxAuiToolBarItem" name="ID_AUITOOLBARMEASURE" variable="AuiToolBarMeasure" member="yes">
                            <bitmap>/home/username/project/icon.bmp</bitmap>
                            <handler function="OnTest" entry="EVT_TOOL" />
                        </object>
                        <label>Test</label>
                    </object>
                </object>
            </object>
        </object>
    </object>
</wxsmith>

导致以下源代码:

toolbar->AddTool(ID_AUITOOLBAR1, _("Test"),
    wxBitmap(wxImage(_T("/home/username/project/icon.bmp"))), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL);

但是透明度信息丢失了。

如果我使用 png 文件或转换为 xpm,则会出现运行时错误:“../src/gtk/bitmap.cpp(626): assert "image.IsOk()" failed in wxBitmap(): invalid图片

目前我正在尝试让它与 WxSmith 一起工作,但如果事实证明这是不可能的,如果有人能帮助我让它在没有 WxSmith 的情况下工作,我也会很高兴。

为了在 运行 期间加载 PNG 文件,您需要注册 PNG 图像处理程序,这可以通过 wxInitAllImageHandlers() 完成。而且您仍然应该实际检查位图创建是否成功,因为总是有可能找不到文件或文件已损坏。

或者,您可以直接在程序中嵌入 PNG,然后使用方便的 wxBITMAP_PNG() macro 加载它。在这种情况下,您通常可以省略错误处理。