PDF de programación - Apunte de VC++ 6 - Capítulo IV

Imágen de pdf Apunte de VC++ 6 - Capítulo IV

Apunte de VC++ 6 - Capítulo IVgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 6 de Febrero del 2018)
585 visualizaciones desde el 6 de Febrero del 2018
168,0 KB
5 paginas
Creado hace 7a (21/11/2016)
Apunte de Visual C++

 

Por: Demian Panello        [email protected]
                 
Capítulo IV
Indice rápido del capítulo 4:

Control ListBox.
Código para un botón que termina una aplicación. (¿Desea salir?...).
Cargar un ListBox.
Mostrar un elemento seleccionado de una lista en un mensaje.
Pasar varios elementos de una lista a otra.
Pasar un elemento seleccionado de una lista a otra.

 

 

CONTROL: LISTBOX.

Las listas son otros de los objetos más importantes en Windows. Existen: listas, listas desplegables, lista de archivos, listas
de directorios, etc. Todas funciones y características propias pero funcionan básicamente igual. Veamos un ejemplo.

­ Cree un nuevo proyecto basado en diálogos con el MFC AppWizard y llámelo listas1.

Coloque 2 controles ListBox un al lado del otro y dos botones entre ellos.

Acceda a la ventana de propiedades de la lista de la izquierda, (la izquierda suya) (puede dejar visible la ventana de
propiedades si presiona el icono "alfiler" del extremo superior izquierdo), y como ID ponga IDC_NUMEROS. En la
solapa STYLES desmarque la opción SORT, pues en este caso no pretendemos que la lista se ordene
automáticamente.

Para la otra lista escriba IDC_PARES como ID, también quite la marca en STYLES a SORT y en EXTENDED
STYLES marque MODAL FRAME, (verá como cambian los borde de la lista).

Seleccione el botón de arriba, acceda a sus propiedades, como ID escriba IDC_PASAPARES y CAPTIOS = >>. El
botón de abajo tendrá > como CAPTION e ID = IDC_PASA1.

Aún falta agregar un par más de objetos, pero antes agregaremos variables miembro a las listas.

Seleccione nuevamente la lista de la izquierda, presione Ctrl + W, accederá a ClassWizard. Vaya a la solapa Member
Variables, marque IDC_NUMEROS y presione Add Variable. Aparecerá la ventana Add Member Variable; como
NAME escriba m_lstNumeros, como CATEGORY seleccione Control y TIPO CListBox.

Realice los mismo para la otra lista, (la de la derecha), pero como Member Variable Name escriba m_lstPares.

Bien, ahora agregaremos unos controles más para terminar el diseño de la aplicación.

Coloque un pequeño cuadro de edición abajo a la derecha de IDC_NUMEROS y escriba en la propiedad ID,
IDC_CANT.

Coloque un botón debajo de IDC_NUMEROS con la propiedad ID = IDC_CARGAR y CAPTION = Cargar.

Elimine el botón Cancelar y mueva el botón Aceptar para ubicarlo en el extremo inferior izquierdo del cuadro de
diálogo.

Coloque un Static Text a la derecha del cuadro de edición, con el texto (propiedad CAPTION), "Ingrese cantidad de
números".

Cree una variable miembro para el cuadro de edición de TIPO int, CATEGORY values y de nombre m_Cant.

El objetivo del programa será hacer uso de diferentes eventos y propiedades de las listas.

Se ingresará un valor numérico mayor a 0 en el cuadro de edición, luego se presionará el botón Cargar y se cargará la lista
IDC_NUMEROS con los números naturales menores al contenido del cuadro de edición.

También será posible seleccionar un elemento de la lista y mostrarlo en un mensaje.

Al presionar el botón >> se pasarán todos los valores pares de IDC_NUMEROS a IDC_PARES y presionando > , se pasará
el valor seleccionado siempre y cuando sea par.

Finalmente presionando Aceptar se terminará la aplicación, pero antes preguntando al usuario si es realmente lo que desea.

Primero  codificaremos  el  botón  Aceptar;  haciendo  doble  click  vamos  directamente  al  mensaje  por  dedfecto  OnOk(),  ahí
escriba:

void CListas1Dlg::OnOK()

{

// TODO: Add extra validation here

if (MessageBox("¿Desea salir?","Salir",MB_ICONQUESTION+MB_YESNO)==IDYES)

    CDialog::OnOK();

}

Lo único que se agregó fue la línea if, donde se averigua que botón del MessageBox se ha pulsado; si fue YES se termina el
programa, caso contrario continúa todo igual.

En este caso se hace uso del valor que retorna MessageBox(), que pueden ser varios de acuerdo a los botones usados en el
mensaje.

Si probamos la aplicación y pulsamos el botón Aceptar veremos que ahora aparece un mensaje preguntando si efectivamente
queremos salir; mensaje típico de todo programa Windows.

Seleccione  el  botón  Cargar  y  acceda  a  ClassWizard.  Allí  seleccione  Message  Maps,  luego  en  Objects  ID’s  marque
IDC_CARGAR,  en  MESSAGE  marque  BN_CLICKED  y  entonces  presione  ADD  FUNCTION  e  inmediatamente  EDIT
CODE.

Aparecerá la función OnCargar(), allí escriba:

void CListas1Dlg::OnCargar()

{

// TODO: Add your control notification handler code here

CString c; (1)

int i; (2)

UpdateData(TRUE); (3)

m_lstNumeros.ResetContent (); (4)

for (i=1; i<=m_Cant; i++) (5)

    {

    c.Format ("%s%i",c, i); (6) //formateo i como String

    m_lstNumeros.AddString(c); (7) //lo agrego a la lista

    c="";

    }

}

El contenido de una lista es de tipo Cstring, por eso se declara una variable de este tipo en (1), luego en (2) se declara un
valor entero para recorrer todos los valores menores al ingresado en el cuadro de edición.

Con UpdateData(TRUE) en (3) se transfiere el contenido del cuadro de edición a la variable miembro m_Cant.

En (4) se limpia el contenido de la lista; y en (5) se realiza un bucle variar para i =1 hasta m_Cant, lo que da a lugar que por
cada vuelta el elemento que debemos cargar en la lista es el índice i pero convertido ha cadena, que es lo que hace (6) con la
función Format de la clase CString dejando el valor formateado en la variable c que en (7) es agregada a la lista con la
función AddString de la clase CListBox.

Ya tenemos cargada la lista IDC_NUMEROS, ahora vamos a escribir el código que al seleccionar un elemento lo muestre en
un mensaje.

Para  esto  seleccionamos  la  lista  y  accedemos  a  ClassWizard,  allí  en  Message  Maps  con  IDC_NUMEROS  marcado  en
Object ID’s seleccionamos LBN_SELCHANGE en Message, pulsamos Add Function y luego Edit Code.

Escriba:

void CListas1Dlg::OnSelchangeNumeros()

{

// TODO: Add your control notification handler code here

CString strTexto; (1)

m_cboNumeros.GetText (m_cboNumeros.GetCurSel (), strTexto); (2)

MessageBox(strTexto); (3)

}

El elemento seleccionado si bien es un número porque precisamente cargamos números son de tipo CString, o sea cadenas,
por eso se declara en (1) la variable CString strTexto.

Los elementos de una lista se encuentran dentro de ella en una posición determinado empezando por el primero que se ubica
en posición 0 el segundo en 1 así sucesivamente. La función GetCurSel() retorna la ubicación de el elemento seleccionado, o
sea si está marcado el primero retorna 0; y GetText() que tiene 2 parámetros (ubicación, contenido), deja en el segundo
parámetro  el  valor  ubicado  en  lo  indicado  en  el  primer  parámetro;  por  eso  en  (2) se usa esa combinación de funciones:
obtener el texto del seleccionado y dejarlo en la variable strTexto.

En la línea (3) se muestra el elemento seleccionado.

Escribiremos ahora el código para el botón IDC_PASAPARES.

Cree la función OnPasapares(), a través de ClassWizard o simplemente haciendo doble click en el control.

void CListas1Dlg::OnPasapares()

{

// TODO: Add your control notification handler code here

int i, n, ce; (1)

CString strC; (2)

ce=m_lstNumeros.GetCount (); (3)

if (ce > 0) (4)

    for (i=0; i< ce; i++) (5)

        {

        m_lstNumeros.GetText (i, strC); (6) //obtengo elemento

        n=atoi(strC); (7) //lo convierto a numérico

       if(n%2==0) (8) //averiguo si es par

           m_lstPares.AddString(strC); (9) //lo paso a la otra

        }

}

Primero (1) se declaran variables enteras; i será el índice del variar, ce la cantidad de elementos de la lista IDC_NUMEROS
y n donde se almacenará cada elemento convertido a numérico para poder averiguar si es par o no. En strC se almacenará
cada elemento.

En (3) por medio de GetCount() se obtiene la cantidad de elementos en IDC_NUMEROS.

Si la cantidad de elementos es mayor a 0 (4) comienzan a recorrerse todos los elementos de la lista, desde el primero, 0,
hasta el último, ce­1. Por cada elemento obtengo el contenido a través de la función GetText (5) a la cual se le pasa el índice
i y la variable donde dejará el valor.

Como tengo que ver si ese valor es par o no, debo pasarlo a entero, pues es una cadena; esto hace la línea (7) por medio de la
función atoi (array to integer), dejando en la variable n el valor en formato integer.

Si  el  resto  de  dividir  n  por  2  es  0,  es  porque  es  par,  entonces,  lo  paso  a  IDC_PARES,  así  sucesivamente,  elemento  por
elemento hasta recorrer toda la lista IDC_NUMEROS.

 

El botón IDC_PASA1 es más fácil, pues solamente hay que averiguar si es par el que está seleccionado.

Cree una función de gestión para el mensaje OnPasa1, tal como lo hizo para el botón anterior, y escriba:

void CListas1Dlg::OnPasa1()

{

// TODO: Add your control notification handler code here

int n;

CString strC;

m_lstNumeros.GetText (m_lstNumeros.GetCurSel (), strC);

n=atoi(strC);

if (n%2==0)

    m_lstPares.AddString (strC);

}

Estas líneas de código son exactamente las misma que están en el botón IDC_PASAPARES, (detalladas anteriormente), sólo
que aquí no hace falta ningún bucle pues solamente interesa el elemento seleccionado.

Se obtiene el valor del elemento seleccionado, se lo convierte a entero, se averigua si es par y en caso positivo se lo pasa a la
otra lista.

Resumiendo:

Las listas, sean ListBox o ComboBox poseen la función miembro AddString() con la cual incorporan elementos.
Los elementos de una lista tienen una posición dentro de ella donde el primer elemento es 0. Este índice se obtiene por
medio de la función miembro GetCurSel(), la misma retorna la posición del elemento seleccionado.
La cantidad de elementos de una lista se obtiene con la función GetCount().

El elemento seleccionado se obtiene por medio de GetText() cuyos parámetros son: el índice en la lista donde se
encuentra el elemento y una variable CString donde se almacenará el valor.

A una lista se le asocia una variable de Category Contro
  • Links de descarga
http://lwp-l.com/pdf8645

Comentarios de: Apunte de VC++ 6 - Capítulo IV (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad