wxribbonbuttonbase动态标签改变

wxribbonbuttonbase dynamic label change

我想更改位于 wxRibbonButtonBar 下的按钮的标签。可以通过调用 wxRibbonButtonBarGetItemByID 方法来访问按钮,其中 returns 是 wxRibbonButtonBarButtonBase 的对象类型,它是一个没有方法的抽象 class。

我进行了广泛的搜索,但找不到关于如何动态更改 wx 中的功能区按钮的明确解决方案。任何帮助表示赞赏:

下一行给出了错误:

pointer to incomplete class type is not allowed

this->help_bar->GetItemById(RIBBON_CHECK)

其中 help_barwxRibbonButtonBar

我在玩 wxWidgets samples 目录下的 wx Samples 时找到了解决这个问题的方法。功能区项目很好地展示了如何将按钮标签的更改绑定到 EVT_UPDATE_UI 以及 wxUpdateUIEvent 对象的 SetText() 方法的使用。

SetText() 方法不会更新 UI,因此仍然需要重新绘制或刷新。我想这本身就是另一个问题。

我仍然认为这是更新按钮标签的一种非常奇怪的方式,但至少有一个答案:)

示例实现:

/// Event Table
BEGIN_EVENT_TABLE(SomeClass, MyFrame1)
EVT_UPDATE_UI(RIBBON_HELPOPEN, SomeClass::UpdateRibbonButtonText)
EVT_UPDATE_UI(RIBBON_FITVIEW, SomeClass::UpdateRibbonButtonText)
END_EVENT_TABLE()

void SomeClass::UpdateRibbonButtonText(wxUpdateUIEvent &event) {
    if (event.GetId() == RIBBON_HELPOPEN) {
        event.SetText(_("Help"));
    }
    else if (event.GetId() == RIBBON_FITVIEW) {
        event.SetText(_("Fit View"));
    }
}