在wxBitmap上更新wxBitmap

时间:2017-11-16 07:06:44

标签: wxwidgets

我正在使用单个wxButton:

wxButtonAction::wxButtonAction(wxWindow* parent) : wxButton(parent,wxID_ANY) {
#if defined __WXMSW__
    wxIcon ms_icon(wxT("START_ICON"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16);
    wxBitmap button_bmp;
    button_bmp.CopyFromIcon(ms_icon);
#else
    wxFileName icon_path(DATA_DIR, wxT("start.ico"));
    wxBitmap button_bmp(icon_path.GetFullPath(), wxBITMAP_TYPE_ICO);
#endif
    SetLabel(_("&Start"));
    SetBitmap(button_bmp);
}

比特币按钮按预期显示。当用户单击该按钮时,此方法可帮助我更改位图和标签:

void wxButtonAction::updateOnAction(bool isRunning) {
#if defined __WXMSW__
    wxIcon ms_icon((isRunning) ? wxT("STOP_ICON") : wxT("START_ICON"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16);
    wxBitmap button_bmp;
    button_bmp.CopyFromIcon(ms_icon);
#else
    wxFileName icon_path(DATA_DIR, (!isRunning) ? wxT("stop.ico") : wxT("start.ico"));
    wxBitmap button_bmp(icon_path.GetFullPath(), wxBITMAP_TYPE_ICO);
#endif
    SetLabel((!isRunning) ? _("&Stop") : _("&Start"));
    SetBitmap(button_bmp);
}

现在是资源文件:

AAPP_ICON ICON DISCARDABLE "../data/app.ico"
ABOUT_ICON ICON "../data/about.ico"
CLOSE_ICON ICON "../data/close.ico"
START_ICON ICON "../data/start.ico"
STOP_ICON ICON "../data/stop.ico"

1 24 "../data/manifest.xml"

当用户切换单击按钮时,标签会进行属性更改,但图标不会始终位于“开始”位图中。我可以确认所有图标都存在于同一个文件夹中

1 个答案:

答案 0 :(得分:0)

您根本不需要使用CopyFromIcon(),MSW下有wxIconwxBitmap的隐式转换(因为在其他平台下它们完全相同)。话虽这么说,明确地称它应该仍然有用,所以不清楚问题是什么。

我想推荐另外两件事:首先,现在更喜欢使用PNG(具有真正的alpha透明度)到ICO。您可能会发现wxBITMAP_PNG()对于避免预处理器检查也很有用。

其次,从.rc文件中删除清单行,然后添加#include "wx/msw/wx.rc"。这将为清单做正确的事情,并定义wxWidgets应用程序所需的其他东西。