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

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

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

Actualizado el 21 de Marzo del 2018 (Publicado el 5 de Febrero del 2018)
770 visualizaciones desde el 5 de Febrero del 2018
372,3 KB
10 paginas
Creado hace 7a (21/11/2016)
Apunte de Visual C++

 

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

Tipos de aplicaciones.
Arquitectura Documento­Vista.
Clase CDocument.
Clase CView.
Clase CFrameWnd.
Colocar la extensión de los documentos.
Clases que forman la aplicación SDI.
La clase CList.
Cómo acceder a los datos del documento desde la vista, (función GetDocument()).
Agregar elementos a la lista.
La función SetModifiedFlag().
Obtener elementos de la lista.
Eliminar todos los elementos de la lista.

 

APLICACIONES SDI, (SINGLE DOCUMENT INTERFACE):

Como habrá visto mientras utiliza algunos programas de Windows, existen notables diferencias entre las aplicaciones que
venimos haciendo y esos programas. Ejemplo: el Wordpad es bien diferente, por lo menos en aspecto, a los ejemplos que he
presentado hasta ahora, y más diferente es aún Excel.
Básicamente existen 3 tipos de aplicaciones Windows:
 
­ Basadas en diálogos: que es lo que hemos hecho hasta ahora. Simplemente ventanas.
­ SDI, (Single Document Interface): Aplicaciones de interfaz de un único documento. Dentro de esta categoría está por
ejemplo el Wordpad y el Paint.
­ MDI, (Múltiple Document Interface): Aplicaciones de interfaz de múltiples documentos. Excel, FrontPage, etc.
 
En una aplicación SDI hasta que no se guarde el trabajo no se puede abrir otro documento. Por ejemplo en Worpad hasta que
no se guarde, o se cancele, lo que se está escribiendo, no se puede abrir uno nuevo o uno existente.
 
Arquitectura Documento ­ Vista:
 
En una aplicación SDI uno tiene la información, (documento), y diferentes formas de presentarla, (vista). Todo esto
contenido de alguna forma, (marco).
Bien, cuando uno crea con el ApplicationWizard una aplicación SDI se generan 3 clase muy importantes, además de la clase
para la aplicación y para el diálogo Acerca de.
Estas 3 clases son derivadas de CDocument, CView y CFrameWnd.
 
CDocument: La clase CDocument provee la funcionalidad básica para clases documentos definidas por el usuario. Un
documento representa la información que por lo general el usuario manipula cuando abre o guarda un archivo utilizando el
menú Archivo.
 
CView: La clase CView provee la funcionalidad básica para las clases vistas definidas por el usuario. Una vista es la
intermediaria entre el documento y el usuario. La vista se encarga de representar la información contenida en el documento.
Existen varias vistas derivadas de CView:
 

­ CListView.
­ CCtrlView.
­ CDaoRecordView.
­ CEditView.
­ CRecordView.
­ CFormView.
­ CRichEditView.
­ CScrollView.
­ CTreeView.
 
(para más información sobre las vistas vea la ayuda de Visual C++).
 
CFrameWnd: Esta clase es la esencia de una aplicación SDI. Es la ventana contenedora de la vista y el documento.
 
Bueno, ahora vamos a crear una aplicación SDI. La aplicación tendrá como objetivo algo parecido a lo que hicimos en el
capítulo anterior. Se dibujarán líneas con sólo pulsar el botón izquierdo del mouse y con el derecho se limpia la pantalla.
 
Ingrese a Visual C++, vaya al menú FILE ­ NEW y en la solapa PROJECTS seleccione MFC AppWizard (exe). En
Project Name escriba "lineas2", pulse OK.
En el siguiente paso seleccione SINGLE DOCUMENT.
 

 
 
Pulse NEXT. Deje como están por defecto las opciones de las siguientes dos pantallas, hasta que llegue al paso 4, allí pulse
el botón ADVANCED:
 

 
En esta ventana le decimos a AppWizard que extensión tendrán los archivos que manipule nuestra aplicación, (cuando ésta
pueda grabar y abrir). Entonces en File extension escriba "lin", esta será la extensión de nuestros archivos. Pulse Close, la
ventana del paso 4 indica que tendrá por defecto nuestra aplicación SDI, como por ejemplo "barra de estado", "barra de
herramientas", etc. Esa opciones déjelas como están por defecto y pulse FINISH.
 
AppWizard creará el armazón de nuestra primer aplicación SDI, que es totalmente funcional, puede si lo desea probar el
programa pulsando CTRL­F5 y verá que funciona, aunque aún no pasa nada si se pulsa algún elemento del menú.
 

 
 
Ahora analizaremos un poco que es lo que AppWizard nos generó automáticamente.
Mire algo curioso; vaya a la solapa ResourceView de la ventana Workspace y expanda la carpeta Dialog. ¿Donde está el
diseño de la aplicación?, esa ventana con menú que aparece cuando ejecutó la aplicación, (imagen sobre estas líneas). En la
carpeta Dialog solamente encontrará el diseño del diálogo Acerca de, y solamente eso.
Lo que ocurre es que la ventana con el menú, la barra de herramientas y la barra de estado que UD ve cuando ejecuta el
programa es la ventana marco creada por la clase CFrameWnd, (siga leyendo que más abajo se aclara todo). La región en

blanco es la vista donde se mostrará la información del documento, en nuestro caso esa información serán líneas.
 
Ahora seleccione la solapa ClassView de la ventana Workspace allí verá las clases que forman nuestra aplicación:
 

 
 
CAboutDlg: Es la clase del diálogo Acerca de.
CLineas2App: Es la clase aplicación presente en todos los programas, sean Basados en diálogos, SDI o MDI.
CLineas2Doc: Es la clase documento, la cual se encarga de manejar los datos, (la información), del programa.
CLineas2View: Es la clase vista que se encargará de mostrar la información en pantalla o en impresora.
CMainFrame: Es la ventana ­ marco, contenedora de la vista.
 
Nuestros datos, o información, en el documento serán una lista de puntos, (pares x, y), de acuerdo a las pulsaciones del
botón izquierdo del mouse en diferentes lugares de la vista. Por ejemplo: si el usuario pulsa 3 veces el botón izquierdo del
mouse en diferentes lugares de la vista se obtendría dos líneas uniendo esos puntos, lo que implica que son 3 pares x,y, y
esos pares son nuestra información y los guardamos en una lista dinámica, (CList), como dato público perteneciente a
nuestra clase documento.
El dibujo de las líneas estará a cargo de la vista, o sea, el código que dibuja las líneas y va guardando los pares x, y, se
escribirá en el mensaje WM_LBUTTONDOWN de la vista.
 
Entonces lo primero que vamos a hacer es agregar ese dato miembro de tipo CList en la definición de la clase CLineas2Doc.
Pulse dos veces donde dice CLineas2Doc en ClassView, se editará la definición de la clase: (a continuación se transcribe el
principio de la clase).
 
class CLineas2Doc : public CDocument
{
protected: // create from serialization only
CLineas2Doc();
DECLARE_DYNCREATE(CLineas2Doc)

// Attributes
public:
        CList<CPoint, CPoint> m_ListaPuntos;        //Esta línea declara una variable de tipo CList.
// Operations
public:

// Overrides
// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CLineas2Doc)
public:
....
 
}
 
Marcada en amarillo se encuentra la declaración de la variable CList.
La clase CList permite crear objetos que se comportan como las listas doblemente enlazadas de C. Para decirlo de forma
sencilla, son listas dinámicas en las cuales uno puede ir agregando elementos sin estar limitados por una cantidad fija a
almacenar. Imagine que en lugar de una variable CList que permita almacenar variables tipo CPoint hubiéramos declarado
una array, (vector), de por ejemplo 50 posiciones de tipo CPoint. Estaríamos limitados a guardar sólo 50 puntos. Esta,
obviamente no es la idea, por eso se usa la clase CList cuya definición se encuentra en el archivos "afxtempl.h" el que
tendremos que incluir en el archivo de cabecera StdAfx.h. Entonces en la solapa FILES de la ventana Workspace expanda la
carpeta Header Files y pulse dos veces sobre StdAfx.h.
Agregue luego de la última sentencia #include la siguiente línea: #include "afxtempl.h".
La definición de CList es la siguiente:
 
template< class TYPE, class ARG_TYPE >
class CList : public CObject
 
TYPE: Es el tipo de dato, (clase), que guardará la lista. En nuestro ejemplo es CPoint.
ARG_TYPE: Es el tipo usado para referenciar los objetos de la lista. Habitualmente este argumento es igual que el anterior.
 
Los valores de la lista se obtienen por medio de una variable de tipo POSITION.
Esta lista nos permitirá reconstruir nuestro dibujo, (simples trazados de líneas), cuando por ejemplo tenemos que redibujar la
vista en caso que se minimice la aplicación u otra ventana se superponga sobre la nuestra.
 
El siguiente paso es crear una variable miembro en el documento. Esta variable será de tipo BOOL y no servirá para saber si
el usuario a pulsado por primera vez el mouse, lo que implica que está comenzando a dibujar líneas. 
Esta variable le daremos el valor TRUE cada vez que se inicia un nuevo documento, puesto que el mismo está en blanco,
disponible para dibujar. Cuando pulse por primera vez el botón del mouse sobre nuestra vista estableceremos su valor a
FALSE para saber que ya se está dibujando.
 
Para crear la variable pulse con el botón derecho del mouse, en ClassView, sobre la clase CLineas2Doc y luego seleccione
ADD MEMBER VARIABLE.
En el cuadro de diálogo que aparece escriba en Variable Type: BOOL y en Variable Name: m_Nuevo. Acepte este diálogo.
 
El valor inicial de esta variable se lo especificaremos cada vez que se crea un nuevo documento, esto es el mensaje
OnNewDocument() de nuestro documento. Entonces pulse dos veces sobre OnNewDocument() y se editará la función:
 
BOOL CLineas2Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;

// TODO: add reinitialization code here
// (SDI documents will reuse this document)

m_Nuevo=TRUE;        //Aquí se inicializa la variable.
return TRUE;
}
 
Por ahora este es el código necesario que le incumbe a nuestro documento.
Como la vista es la encargada de mostrar los datos y sirve de intermediaria entre el usuario y los datos que se almacenan en
el documento, será en ella, (la vista), donde escribiremos el resto del código de nuestra aplicación. ¿Qué nos falta
programar?.
Hay que escribir el código que permita al pulsar el botón izquierdo del mouse, que se guarden en la lista los puntos donde se
hizo click y además dibujar
  • Links de descarga
http://lwp-l.com/pdf8626

Comentarios de: Apunte de VC++ 6 - Capítulo XI (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