2009-03-10 3 views
0

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

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

ответ

1

Вы должны использовать EVT_UPDATE_UI(yourCommandID, yourEventHandler) для проверки/снятия отметки и включения/отключения элементов меню. В обработчике событий UpdateUI вы должны указать случаи, когда ваш элемент включен. E.g. вы RadioButton группу с командами 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()); 
} 
+0

Есть одна проблема. Я полагаю, что эта группа радиоимен (она находится в подменю) динамически (это список тайм-аутов, читаемых откуда-то при запуске). – jonny

+0

Вы можете добавлять обработчики событий в ваш wxForm динамически с помощью метода Connect(). Когда вы создаете элементы rmenu, вы можете использовать wxNewId() для создания идентификаторов, а затем подключить обработчики событий с этими идентификаторами. После закрытия всплывающего меню вы должны отключить эти обработчики событий. –