为wxAuiToolBar添加我自己的图标

Adding my own Icon for wxAuiToolBar

本文关键字:自己的 图标 我自己 添加 wxAuiToolBar      更新时间:2023-10-16

我想在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(:断言"图像。IsOk((" 在 wxBitmap(( 中失败:图像无效">

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

为了在运行时加载PNG文件,您需要注册PNG图像处理程序,这可以使用wxInitAllImageHandlers((来完成。您仍然应该实际检查位图创建是否成功,因为始终有可能找不到或损坏该文件。

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