2015-07-13 3 views
0

Я хочу изменить метку кнопки, расположенной под wxRibbonButtonBar. Можно получить доступ к кнопке, вызвав метод GetItemByIDwxRibbonButtonBar, который возвращает тип объекта wxRibbonButtonBarButtonBase, который является абстрактным классом без методов.wxribbonbuttonbase изменение динамической метки

Я сделал обширный поиск, но не смог найти четкое решение о том, как менять кнопки ленты в wx динамически. Любая помощь приветствуется:

Ниже строки выдает ошибку:

pointer to incomplete class type is not allowed

this->help_bar->GetItemById(RIBBON_CHECK)

где help_bar является wxRibbonButtonBar

ответ

0

Я нашел решение этой проблемы, в то время, играя с WX образцов при пробах каталог wxWidgets. Проект ленты прекрасно показывает, как связать изменение меток кнопок с EVT_UPDATE_UI и использовать метод SetText() объекта wxUpdateUIEvent.

Метод SetText() не обновляет пользовательский интерфейс, поэтому перерисовка или обновление по-прежнему необходимы. Думаю, это другой вопрос сам по себе.

Я до сих пор считаю, что это очень странно способ обновления метки кнопки, но по крайней мере есть ответ :)

Пример реализации:

/// 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")); 
    } 
} 
Смежные вопросы