【问题标题】:Updating the wxBitmap on wxBitmap更新 wxBitmap 上的 wxBitmap
【发布时间】:2017-11-16 07:06:43
【问题描述】:

我正在使用单个 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"

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

【问题讨论】:

    标签: wxwidgets


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢关于 wxBITMAP_PNG 的提示,确实减少了代码行。但仍然看不到用户点击时图标交换。
    • 我在您的代码中没有发现任何问题,请尝试使用事件处理程序外部的停止位图调用SetBitmap(),它有效吗?可能是位图有问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2021-04-23
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多