Domanda

Sto usando un menu popup con wxTaskBarIcon su Windows (wxWidgets-2.8.9). Se riempio il menu popup con elementi radio, questi non cambiano stato quando si fa clic. Il primo elemento nell'elenco del menu a comparsa è contrassegnato come selezionato. Ma selezionare qualsiasi altro elemento non cambia questo.

Attualmente non esiste un gestore di eventi clic elemento (l'applicazione è più simile al prototipo dell'interfaccia utente). Devo aggiornare manualmente lo stato di verifica degli articoli in questo gestore o è ancora un dovere del framework?

È stato utile?

Soluzione

Dovresti usare EVT_UPDATE_UI (yourCommandID, yourEventHandler) per controllare / deselezionare e abilitare / disabilitare le voci di menu. Nel gestore eventi UpdateUI è necessario specificare i casi in cui l'elemento è abilitato Per esempio. hai un gruppo di pulsanti radio con i comandi ID_RADIO_1 e ID_RADIO_2 e dovrebbero essere controllati in base alla condizione bool m_SomeConditionVariable , quindi dovresti creare 2 gestori di eventi per loro come

void OnRadio1UpdateUI(wxUpdateUIEvent & event)
{
    event.Checked(m_SomeConditionVariable == true);
}

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    event.Checked(m_SomeConditionVariable == false);
}

e in questo caso la prima voce radio verrà controllata solo quando la variabile è falsa e la seconda verrà controllata quando la variabile è vera.

Puoi anche utilizzare una condizione calcolata instabile per l'archiviazione della variabile, ad esempio

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    // Item will be enabled only when text control has non-empty value
    event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top