Я пытаюсь реализовать подменю выбора языка (радиоэлементы) в меню панели задач с помощью wxWidgets 2.8.12. Но когда я пытаюсь проверить активный язык, пункт все еще не проверен. Вот фрагмент кода из TrayIcon :: CreatePopUpMenu ()
info = locale->FindLanguageInfo(languages[i]); // languages - array of strings
wxMenuItem *item = menuLanguage->AppendRadioItem(ID_Locale + info->Language, info->Description);
if (locale->GetLanguage() == (item->GetId() - ID_Locale)))
item->Check(true);
События:
BEGIN_EVENT_TABLE(SystemTrayIcon, wxTaskBarIcon)
EVT_MENU_RANGE(ID_Locale, ID_Locale + LANGUAGES_COUNT, TrayIcon::ChangeAppLocale)
EVT_UPDATE_UI_RANGE(ID_Locale, ID_Locale + LANGUAGES_COUNT, TrayIcon::UISelectLocale)
END_EVENT_TABLE()
Действие:
void TrayIcon::OnMenuUILocaleChange(wxUpdateUIEvent &event)
{
int id = locale->GetLanguage();
if (id == (event.GetId() - ID_Locale))
{
event.Check(true);
}
}
Поэтому, когда я нажимаю на радиоэлемент, выполняются действия, определенные в TrayIcon :: ChangeAppLocale, но кнопка не проверяется при создании меню. Во время отладки я вижу, что item-> Check (true) имеет место и item-> Checkable () становится true. Но позже в TrayIcon :: OnMenuUILocaleChange элемент не проверяется (я знаю, что здесь немного сложнее, но, по крайней мере, я могу посмотреть значение проверки)
Когда выполняются те же действия для меню приложения (добавление языкового подменю), проверка активна.
я видел Проверка радиопрограммы во всплывающем меню но советы оттуда не помогли. Спасибо
Задача ещё не решена.