Apunte de Visual C++
Por: Demian Panello
[email protected]
Capítulo III
Indice rápido del capítulo 3:
Controles Radio Button, Check Box y Group Box.
Clase CWnd, clase CButton.
Función GetCheck().
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.
Seleccione un control GROUP BOX de la barra de herramientas.
Escriba Marcas en la propiedad Caption del GROUP BOX.
Luego coloque 3 radio buttons dentro del GROUP BOX
Las propiedades de los tres botones de opción serán:
El primero: ID = IDC_BMW, CAPTION = BMW y tildar GROUP.
El segundo: ID = IDC_AUDI, CAPTION = Audi y no tildar GROUP.
El tercero: ID = IDC_OPEL, CAPTION = Opel y no tildar GROUP.
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.
Agregue otro GROUP BOX a la izquierda de Marcas con la propiedad CAPTION = Tipos.
Coloque 3 radio buttons dentro del GROUP BOX y especifíquele las siguientes propiedades:
El primero: ID = IDC_SEDAN, CAPTION = Sedan, tildar GROUP y en STYLE tildar PUSH LIKE.
El segundo: ID = IDC_COUPE, CAPTION = Coupé, no tildar GROUP y en STYLE tildar PUSH LIKE.
El tercero: ID = IDC_BREAK, CAPTION = Break, no tildar GROUP y en STYLE tildar PUSH LIKE.
Aquí el primero como tiene la propiedad GROUP tildada da por finalizado el agrupamiento anterior y comienza el nuevo de
los Tipos.
Por último coloque 2 CHECK BOX a la izquierda:
El primero ID = IDC_AIRE, Caption = con aire y GROUP tildado (da por finalizado el grupo anterior).
El segundo ID = IDC_CD, Caption = con CD y GROUP sin tildar.
Más o menos así quedaría el diseño:
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:
Seleccione el primer radio button del grupo Autos, (BMW) y acceda a ClassWizard.
En ClassWizard vaya a la solapa Member Variables y seleccione IDC_BMW.
Presione Add Variable; aparecerá la ventana Add Member Variable.
Allí ingrese m_Marca como Member Variable Name; seleccione Value en Category y Variable Type = int.
Haga lo mismo para el primer radio button del grupo Tipos (Sedán) y llame a la variable m_Tipo.
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:
En la ventana WorkSpace, seleccione la solapa ClassView.
Expanda la rama de la clase CAutosDlg.
Haga doble click en la primer función: CAutosDlg(CWnd *pParent = NULL).
Verá que las variables creadas tienen el valor –1, cámbielo por 0. Esto establece como seleccionada la primer opción,
(BMW en el primer grupo y Sedan en el segundo).
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:
Para saber si un Check Box está marcado o no se debe usar la función GetCheck() de la clase Cbutton, por lo tanto de
debe convertir el puntero CWnd que retorna GetDLgItem() a CButton. Es bueno tener en cuenta eso de poder
convertir de una clase a otra en caso de necesitar alguna función en especial.
Se conoce un Radio Button seleccionado perteneciente a un grupo a través de pasar el ID del primer control del grupo
más la variable miembro a GetDlgItem().
Descargar archivos fuentes del ejemplo: autos.zip
Capítulo siguiente (4)
Capítulo anterior (2)
Comentarios de: Apunte de VC++ 6 - Capítulo III (0)
No hay comentarios