wxribbonbuttonbase动态标签改变
wxribbonbuttonbase dynamic label change
我想更改位于 wxRibbonButtonBar
下的按钮的标签。可以通过调用 wxRibbonButtonBar
的 GetItemByID
方法来访问按钮,其中 returns 是 wxRibbonButtonBarButtonBase
的对象类型,它是一个没有方法的抽象 class。
我进行了广泛的搜索,但找不到关于如何动态更改 wx 中的功能区按钮的明确解决方案。任何帮助表示赞赏:
下一行给出了错误:
pointer to incomplete class type is not allowed
this->help_bar->GetItemById(RIBBON_CHECK)
其中 help_bar
是 wxRibbonButtonBar
我在玩 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"));
}
}
我想更改位于 wxRibbonButtonBar
下的按钮的标签。可以通过调用 wxRibbonButtonBar
的 GetItemByID
方法来访问按钮,其中 returns 是 wxRibbonButtonBarButtonBase
的对象类型,它是一个没有方法的抽象 class。
我进行了广泛的搜索,但找不到关于如何动态更改 wx 中的功能区按钮的明确解决方案。任何帮助表示赞赏:
下一行给出了错误:
pointer to incomplete class type is not allowed
this->help_bar->GetItemById(RIBBON_CHECK)
其中 help_bar
是 wxRibbonButtonBar
我在玩 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"));
}
}