Проверка переключателя во всплывающем меню

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

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


person jonny    schedule 10.03.2009    source источник


Ответы (1)


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

и в этом случае первый элемент радио будет проверяться только тогда, когда переменная ложна, а второй будет проверяться, когда переменная истинна.

Вы также можете использовать расчетное условие вместо хранения переменной, например.

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    // Item will be enabled only when text control has non-empty value
    event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}
person T-Rex    schedule 10.03.2009
comment
Есть одна проблема. Я предполагаю сформировать эту группу радиоэлементов (она находится в подменю) динамически (это своего рода список тайм-аутов, считанный откуда-то при запуске). - person jonny; 10.03.2009
comment
Вы можете динамически добавлять обработчики событий в wxForm с помощью метода Connect(). Когда вы создаете элементы rmenu, вы можете использовать wxNewId() для создания идентификаторов, а затем подключать обработчики событий с этими идентификаторами. После закрытия всплывающего меню необходимо отключить эти обработчики событий. - person T-Rex; 10.03.2009