J'ai une boîte de dialogue MFC dans laquelle se trouvent deux boutons radio. Je les ai mis dans un bon groupe, leurs IDC sont l'un après l'autre (RB_LEFT, RB_RIGHT
).Boutons radio MFC - Comportement DDX_Radio et DDX_Control
Je veux utiliser DDX_Radio
pour que je puisse accéder aux boutons en utilisant une valeur entière ainsi dans la fonction DoDataExchange j'appelle:
DDX_Radio(pDX, RB_LEFT, mRBLeftRight);
où mRBLeftRight est une variable membre de type entier. Je dois aussi modifier les propriétés des boutons, donc je voulais utiliser un DDX_Control
pour les mapper sur les variables membres mRBLeft et mRBRight (CButton):
DDX_Control(pDX, RB_LEFT, mRBLeft);
DDX_Control(pDX, RB_RIGHT, mRBRight);
si je fais l'appel à DDX_Control
, chaque fois que DoDataExchange est appelée, le l'application se bloque car DDX_Control
force RB_LEFT
à gérer un message que DDX_Radio
ne peut pas gérer. Cette partie je comprends.
J'ai décidé de ne pas utiliser DDX_Control
(supprimé les appels dans DoDataExchange) et de simplement garder un pointeur sur mes boutons radio (CButton *) dans mes classes. Donc, dans ma fonction OnInitDialog, je fais les appels suivants:
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));
Maintenant, tant que je ne l'utilise mRBLeft ça va bien, mais si je le fais, bam, accident sur DoDataExchange. La chose qui me laisse vraiment perplexe est que si je change mon bouton radio gauche en utilisant ((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
ça va marcher. Sooo quelle est la différence?
(Je sais qu'il est beaucoup de tracas pour peu, mais je veux juste comprendre la mécanique)
J'ai lu quelque part que je ne devrais pas stocker un pointeur retourné à partir de GetDlgItem, ce qui est probablement juste, peut-être c'est la cause de mon problème? – levesque