2015-07-13 159 views
0

我想更改位于wxRibbonButtonBar下的按钮标签。通过调用wxRibbonButtonBarGetItemByID方法可以访问该按钮,该方法返回一个对象类型wxRibbonButtonBarButtonBase,该对象类型是一个没有方法的抽象类。wxribbonbuttonbase动态标签更改

我做了大量的搜索,但无法找到一个清晰的解决方案,如何动态更改wx中的功能区按钮。任何帮助表示赞赏:

以下行给出了错误:

pointer to incomplete class type is not allowed

this->help_bar->GetItemById(RIBBON_CHECK)

其中help_barwxRibbonButtonBar

回答

0

我找到了解决这个问题,同时与WX样品样本下打wxWidgets的目录。 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")); 
    } 
}