Проверка элементов радио во всплывающем меню - PullRequest
0 голосов
/ 10 марта 2009

Я использую всплывающее меню с wxTaskBarIcon для окон (wxWidgets-2.8.9). Если я заполняю всплывающее меню радиоэлементами, они не меняют состояние при нажатии. Первый пункт в списке всплывающего меню помечается как выбранный. Но выбор любого другого предмета не меняет этого.

В настоящее время нет обработчика события щелчка элемента (приложение больше похоже на прототип пользовательского интерфейса). Должен ли я вручную обновлять статус проверки элемента в этом обработчике, или это все еще является обязанностью фреймворка?

1 Ответ

1 голос
/ 10 марта 2009

Вы должны использовать 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());
}
...