MFC boutons radio - DDX_Radio et DDX_Control comportement

J'ai une boîte de dialogue MFC dans lequel il y a deux boutons radio. J'ai mis dans un beau groupe, leur Cdi sont l'une après l'autre (RB_LEFT, RB_RIGHT).

Je veux utiliser DDX_Radio afin que je puisse accéder aux boutons à l'aide d'un entier de valeur dans la fonction DoDataExchange j'appelle :

   DDX_Radio(pDX, RB_LEFT, mRBLeftRight);

où mRBLeftRight est une variable membre de type entier. J'ai aussi besoin de modifier les boutons des propriétés si je voulais utiliser une DDX_Control à la carte sur des variables de membre mRBLeft et mRBRight (CButton):

   DDX_Control(pDX, RB_LEFT, mRBLeft);
   DDX_Control(pDX, RB_RIGHT, mRBRight);

maintenant, si je ne l'appel à DDX_Control, chaque fois que DoDataExchange est appelée, l'application se bloque parce que DDX_Control forces RB_LEFT pour traiter un message qui DDX_Radio ne peut pas gérer. Cette partie, je comprends.

J'ai décidé de ne pas utiliser DDX_Control (plus d'appels dans DoDataExchange) et il suffit de garder un pointeur sur mes boutons radio (CButton*) dans mes classes. Donc, dans ma fonction OnInitDialog, je ne les appels suivants :

   mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
   mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));

Maintenant, tant que je ne l'utilise pas mRBLeft ça va être bien, mais si je le fais, bam, crash sur DoDataExchange. La chose qui m'étonne vraiment, c'est si je change ma gauche bouton radio à l'aide de
((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
il va travailler. Sooo quelle est la différence ?

(Je sais c'est beaucoup de tracas pour peu, mais je veux juste comprendre la mécanique)

J'ai lu quelque part que je ne devrait pas stocker un pointeur retourné à partir de GetDlgItem, ce qui est probablement vrai, c'est peut-être la cause de mon problème?

OriginalL'auteur levesque | 2009-07-22