2009-03-10 29 views
0

J'utilise un menu contextuel avec wxTaskBarIcon sous Windows (wxWidgets-2.8.9). Si je remplis le menu contextuel avec des éléments radio, ils ne changent pas d'état lorsque je clique dessus. Le premier élément de la liste du menu contextuel est marqué comme sélectionné. Mais sélectionner un autre élément ne change pas cela.Vérifications de l'élément radio du menu contextuel

Actuellement, il n'y a pas de gestionnaire d'événement click d'élément (l'application ressemble plus à un prototype d'interface utilisateur). Dois-je mettre à jour manuellement l'état de vérification de l'article dans ce gestionnaire ou est-ce encore un devoir de cadre?

Répondre

1

Vous devez utiliser EVT_UPDATE_UI(yourCommandID, yourEventHandler) pour vérifier/décocher et activer/désactiver les éléments de menu. Dans votre gestionnaire d'événements UpdateUI, vous devez spécifier les cas où votre élément est activé Par ex. vous avez groupe RadioButton avec des commandes ID_RADIO_1 et ID_RADIO_2 et ils doivent être vérifiés selon l'état bool m_SomeConditionVariable vous devez créer 2 gestionnaires d'événements pour eux comme

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

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

et dans ce cas premier élément radio ne sera vérifiée que lorsque la variable est fausse et le second sera vérifié lorsque la variable est vraie.

Vous pouvez également utiliser la condition calculée de la variable de stockage, par ex.

void OnRadio2UpdateUI(wxUpdateUIEvent & event) 
{ 
    // Item will be enabled only when text control has non-empty value 
    event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty()); 
} 
+0

Il existe un problème. Je suppose que pour former ce groupe radio (il est dans un sous-menu) dynamiquement (c'est une sorte de liste de délais d'attente lus de quelque part au démarrage). – jonny

+0

Vous pouvez ajouter dynamiquement des gestionnaires d'événements à votre wxForm en utilisant la méthode Connect(). Lorsque vous créez des éléments rmenu, vous pouvez utiliser wxNewId() pour créer des identifiants, puis connecter les gestionnaires d'événements à ces identifiants. Après la fermeture du menu contextuel, vous devez déconnecter ces gestionnaires d'événements. –