我正在使用单个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"
当用户切换单击按钮时,标签会进行属性更改,但图标不会始终位于“开始”位图中。我可以确认所有图标都存在于同一个文件夹中
答案 0 :(得分:0)
您根本不需要使用CopyFromIcon()
,MSW下有wxIcon
到wxBitmap
的隐式转换(因为在其他平台下它们完全相同)。话虽这么说,明确地称它应该仍然有用,所以不清楚问题是什么。
我想推荐另外两件事:首先,现在更喜欢使用PNG(具有真正的alpha透明度)到ICO。您可能会发现wxBITMAP_PNG()对于避免预处理器检查也很有用。
其次,从.rc
文件中删除清单行,然后添加#include "wx/msw/wx.rc"
。这将为清单做正确的事情,并定义wxWidgets应用程序所需的其他东西。