wxribbonbuttonbase动态标签更改

时间:2015-07-13 11:06:36

标签: abstract-class wxwidgets

我想更改位于wxRibbonButtonBar下方的按钮的标签。可以通过调用GetItemByID的{​​{1}}方法来访问该按钮,该方法返回的对象类型为wxRibbonButtonBar,这是一个没有方法的抽象类。

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

下面的行给出错误:

  

不允许使用指向不完整类类型的指针

wxRibbonButtonBarButtonBase

其中this->help_bar->GetItemById(RIBBON_CHECK)help_bar

1 个答案:

答案 0 :(得分:0)

我在使用wxWidgets的samples目录下的wx Samples时找到了解决这个问题的方法。 Ribbon项目很好地展示了如何将按钮标签的更改绑定到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"));
    }
}