Tengo un cuadro de diálogo MFC en el que hay dos botones de opción. Los puse en un grupo agradable, sus IDCs son uno después del otro (RB_LEFT, RB_RIGHT
).Botones de radio MFC - Comportamiento DDX_Radio y DDX_Control
Quiero usar DDX_Radio
para que pueda acceder a los botones de un valor de número entero por lo que en la DoDataExchange función que llamo:
DDX_Radio(pDX, RB_LEFT, mRBLeftRight);
donde mRBLeftRight es una variable miembro de tipo entero. También necesito para editar los botones de propiedades, así que quería utilizar un DDX_Control
mapearlos en variables miembro mRBLeft y mRBRight (CButton):
DDX_Control(pDX, RB_LEFT, mRBLeft);
DDX_Control(pDX, RB_RIGHT, mRBRight);
ahora si hago el llamado a DDX_Control
, siempre DoDataExchange se llama, el la aplicación se bloquea porque DDX_Control
fuerza RB_LEFT
para manejar un mensaje que DDX_Radio
no puede controlar. Esta parte lo entiendo
Decidí no usar DDX_Control
(eliminé las llamadas en DoDataExchange) y simplemente mantener un puntero a mis botones de radio (CButton *) en mis clases. Así que en mi función OnInitDialog, hago las siguientes llamadas:
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));
Ahora, siempre y cuando no uso mRBLeft que va a estar bien, pero si lo hago, bam, accidente en DoDataExchange. Lo que realmente me desconcierta es que si cambio mi botón de radio izquierdo usando ((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
, va a funcionar. Entonces, ¿cuál es la diferencia?
(Sé que es un montón de problemas para poco, pero sólo quiero entender la mecánica)
Leí en alguna parte que no debería almacenar un puntero devuelto por GetDlgItem, que probablemente sea correcto, ¿quizás esta es la causa de mi problema? – levesque