Проверка элементов радио во всплывающем меню
-
08-07-2019 - |
Вопрос
Я использую всплывающее меню с wxTaskBarIcon для окон (wxWidgets-2.8.9). Если я заполняю всплывающее меню радио-пунктами, они не меняют состояние при нажатии Первый пункт в списке всплывающего меню помечается как выбранный. Но выбор любого другого элемента не меняет этого.
В настоящее время нет обработчика события щелчка элемента (приложение больше похоже на прототип пользовательского интерфейса). Должен ли я вручную обновлять статус проверки элемента в этом обработчике, или это все еще является обязанностью фреймворка?
Решение
Вы должны использовать EVT_UPDATE_UI (yourCommandID, yourEventHandler)
для проверки / снятия отметки и включения / выключения пунктов меню.
В вашем обработчике события UpdateUI вы должны указать случаи, когда ваш элемент включен
Например. у вас есть группа радиокнопок с командами ID_RADIO_1 и ID_RADIO_2, и они должны быть проверены в зависимости от условия bool m_SomeConditionVariable
, затем вы должны создать для них 2 обработчика событий, например
void OnRadio1UpdateUI(wxUpdateUIEvent & event)
{
event.Checked(m_SomeConditionVariable == true);
}
void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
event.Checked(m_SomeConditionVariable == false);
}
и в этом случае первый радиоэлемент будет проверяться, только если переменная равна false, а второй будет проверяться, когда переменная равна true.
Вы также можете использовать вычисленное условие для хранения переменной, например.
void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
// Item will be enabled only when text control has non-empty value
event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}