Question

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 l'utilisateur 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 rien à cela.

Actuellement, il n'y a pas de gestionnaire d'événements de type élément (l'application ressemble davantage à un prototype d'interface utilisateur). Dois-je mettre à jour manuellement le statut de vérification des éléments dans ce gestionnaire ou est-il toujours obligatoire?

Était-ce utile?

La solution

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 lorsque votre élément est activé. Par exemple. vous avez un groupe de radiobutton avec les commandes ID_RADIO_1 et ID_RADIO_2 et elles doivent être vérifiées en fonction de la condition bool m_SomeConditionVariable , vous devez alors créer deux gestionnaires d'événements, comme

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

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

et dans ce cas, le premier élément radio sera coché uniquement lorsque la variable est fausse et le second, lorsque la variable est vraie.

Vous pouvez également utiliser la condition calculée pour stocker la variable, par exemple.

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    // Item will be enabled only when text control has non-empty value
    event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top