Apunte de Visual C++

 

Por: Demian Panello        demianpanello@yahoo.com.ar

                 

Capítulo III

Indice rápido del capítulo 3:

 

 

CONTROLES: RADIO BUTTON, CHECK BOX Y GROUP BOX.

Cree una aplicación MFC basada en diálogo, tal como se hizo en los ejemplos anteriores y póngale autos como Project Name.

La aplicación hará uso de controles de opción (radio button), controles de veirficación (check box) y marcos (GROUP BOX).

Los controles de opción son esos "circulitos" que uno selecciona y que automáticamente otro queda sin efecto (sin seleccionar). Esto ocurre cuando los controles de opción se consideran agrupados. En VC se agrupan de acuerdo al orden en que fueron colocados en el cuadro de diálogo, partiendo de un primer control con la propiedad GROUP activada y hasta que encuentre otro objeto con la misma propiedad GROUP activada.

Para pasar en claro esto último diseñe la aplicación de acuerdo a los siguientes pasos.

marcas.jpg (2565
 bytes)

Se tilda GROUP sólo en el primero para especificar que a partir de ese control en adelante (de acuerdo al orden de tabulación), estarán relacionados los botones de opción hasta encontrar un nuevo control con GROUP tildado.

Aquí el primero como tiene la propiedad GROUP tildada da por finalizado el agrupamiento anterior y comienza el nuevo de los Tipos.

tipos.jpg (3322 bytes)

Por último coloque 2 CHECK BOX a la izquierda:

Más o menos así quedaría el diseño:

autos.jpg (26636
 bytes)

Una vez diseñada la ventana y los controles con sus respectivas propiedades especificadas; hay que crear las variables asociadas a los controles que manipularán los datos.

Aquí los datos son, básicamente, si un botón de opción está activado o no. Se necesitará una variable por grupo de botones de opción: una para el grupo "autos", asociada a la primer opción: BMW y otra para el grupo "tipos", asociada a la primer opción: SEDAN.

Crear variables miembro:

La idea es que al presionar Aceptar, de acuerdo a las opciones seleccionadas muestre un mensaje informativo.

Antes debemos asignarles a las variables recién creadas un valor inicial, para que así, al iniciar la aplicación, estén seleccionados por defecto los primeros radio buttons de cada grupo. Esto se hace editando el constructor de la clase CAutosDlg:

Ahora escribiremos el código del botón Aceptar. Puede acceder al mismo por el ClassWizard o simplemente haciendo doble click sobre el botón.

Escriba:

void CAutosDlg::OnOK()

{

// TODO: Add extra validation here

CWnd *wndAuto; (1)

CWnd *wndTipo; (2)

CString strMensa; (3)

CString strAuto, strTipo, strExtra; (4)

CButton* bAire; (5)

CButton* bCD; (6)

 

//Convierto los dos Check que originalmente son de

//tipo CWnd a tipo CButton para poder hacer uso de

//las funciones de CButton.

bAire = (CButton*) GetDlgItem(IDC_AIRE); (7)

bCD = (CButton*) GetDlgItem(IDC_CD); (8)

strExtra= " -"; (9)

if (bAire->GetCheck () && bCD->GetCheck ()) (10)

    strExtra = " con Aire y CD."; (11)

else if (bAire->GetCheck() && !bCD->GetCheck()) (12)

    strExtra = " con Aire."; (13)

else if (!bAire->GetCheck() && bCD->GetCheck()) (14)

    strExtra = " con CD."; (15)

UpdateData(); (16)

wndAuto=GetDlgItem(IDC_BMW + m_Marca); (17)

wndTipo=GetDlgItem(IDC_SEDAN + m_Tipo); (18)

wndAuto->GetWindowText (strAuto); (19)

wndTipo->GetWindowText (strTipo); (20)

strMensa = "Su auto es un/a: " + strTipo + " " + strAuto + strExtra; (21)

MessageBox(strMensa); (22)

}

Parecerá un poco extenso y complejo este código, pero no desespere, veamos línea por línea.

En las líneas (1) y (2) se declaran dos punteros a CWnd para luego asociarlos a los primeros radio buttons de cada grupo y poder obtener el texto (ver líneas 17, 18 19 y 20).

En las líneas (3) y (4) se declaran algunas variables de cadena donde se almacenarán, por un lado los textos de los radio buttons y check box.

Como antes se comentó, todos los objetos de Windows son ventanas, o sea de la clase CWnd. La clase CButton posee funciones que vamos a necesitar, por ejemplo GetCheck(), entonces en (5) y (6) se declaran dos punteros a CButton que luego en (7) y (8) se usan para relacionarlos con los checks box.

De 10 a 15 se averigua, por medio de GetCheck(), que check box está marcado para así preparar el texto correspondiente.

Con UpdateData(TRUE) en (16) se transfieren los datos de los controles a las variables.

En (17) y (18) se relacionan los radio buttons con punteros CWnd para después, por medio de GetWindowText() se obtiene el texto de los controles seleccionados (19 y 20).

Nos detenemos un instante en (17) y (18) y vemos que es precisamente en esas líneas donde se determina que radio button está seleccionado, pues el parámetro de GetDlgItem es el ID del primer control del grupo más el contenido de la variable miembro.

En (21) se prepara una variable CString que luego en (22) se muestra por pantalla.

Resumiendo:

Descargar archivos fuentes del ejemplo: autos.zip

Capítulo siguiente (4)

Capítulo anterior (2)

Página principal.