leccion 1 visual c++

19
M.Sc. Carlo Corrales 1 VISUAL C++ VISUAL C++ UNIVERSIDAD CATÓLICA SANTA MARÍA P.P. INGENIERÍA DE SISTEMAS CURSO: PROGRAMACIÓN II M.SC. CARLO CORRALES DELGADO

Upload: melvin-cotrado

Post on 09-Dec-2014

113 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Leccion 1 Visual C++

M.Sc. Carlo Corrales1

VISUAL C++VISUAL C++

UNIVERSIDAD CATÓLICA SANTA MARÍA

P.P. INGENIERÍA DE SISTEMASCURSO: PROGRAMACIÓN II

M.SC. CARLO CORRALES DELGADO

Page 2: Leccion 1 Visual C++

2

TEMAS A TRATARTEMAS A TRATAR Jerarquías de MFC Notación Húngara Arquitectura de una aplicación Análisis de una aplicación

– La Clase Aplicación

– La clase Ventana Marco

– La clase Documento

– La clase Vista Jerarquías de las Ventanas

Page 3: Leccion 1 Visual C++

3

Jerarquías de MFCJerarquías de MFC Las clases de la biblioteca MFC se agrupan en:

– CObject (4): Arquitectura de una aplicación, Soporte Gráfico, Soporte del Sistema y Colecciones

– No derivadas de CObject(8): API, Clases de soporte, Modelo de objeto y seriación, Plantillas para colecciones, Tipos de datos varios, Soporte OLE, Estructuras, Sincronización

CObject:Clase raíz para la mayoría de clases (afx.h)– Creación y borrado de objetos– Soporte para seriación, Diagnóstico– Obtener información de un objeto en tiempo de ejecución

DECLARE_DYNCREATE: permite crear objetos de una clase derivada de CObject durante la ejecución

CCmdTarget: objeto que tiene un mapa de mensajes y puede procesarlo

Page 4: Leccion 1 Visual C++

4

Clases de la arquitectura de Clases de la arquitectura de una aplicación - CCmdTargetuna aplicación - CCmdTargetObjeto Aplicación: CWinThread ->

CWinAppPlantilla de documentos: CDocTemplateDocumentos: CDocumentElementos de documento: CDocItem ->

COleClientItem, COleServerItem

Page 5: Leccion 1 Visual C++

5

Clases de la arquitectura de Clases de la arquitectura de una aplicación - CCmdTargetuna aplicación - CCmdTarget Soporte de ventanas: CWnd -> Marcos, Vistas,

Ventanas de Dialogo y Controles– Marcos: CFrameWnd -> SDI y MDI– Vistas: CView -> CScrollView -> CFormView ->CRecordView,

CCrtlView -> CEditView, ClistView, CTreeView– Dialogo: Cdialog -> CPropertyPage, CCommonDialog ->

CFileDialog, CFontDialog, CColorDialog, etc– Controles: CStatic, CEdit, CButton, CComboButton, CListBox,

CScroolBar, CTreeCtrl, CListCtrl, COleControl, CStatusBarCtrl, etc

– Barras de control: CControlBar -> CToolBar, CStatusBar, CDialogBar

– Hojas de Propiedades: CPropertySheet

Page 6: Leccion 1 Visual C++

6

Clases de la arquitectura de Clases de la arquitectura de una aplicación - CCmdTargetuna aplicación - CCmdTarget Soporte Grafico:

– Dibujo de graficos: CDC -> CClienteDC, CPaintDC, CWindowDC– Objeto de dibujo de graficos: CGdiObject -> CBitmap, CBrush,

CFont, CPalette, CPen– Controles Graficos: CDockState, CImageList

Soporte de Sistema:– Menus: CMenu– Excepciones: CException– Sincronizacion: CSyncObject– Conexión a bases de datos: CDatabase, CRecordset– Objetos de acceso a datos: CDaoDatabase, CDaoQueryDef– Programacion de redes: CAsynSocket– Servicios de Internet: CInternetSEssion, CFileFind

Page 7: Leccion 1 Visual C++

7

Clases de la arquitectura de Clases de la arquitectura de una aplicación una aplicación Colecciones: CArray, CList, CMap, etc Clases no derivadas de CObject:

– API para servidor internet

– Modelo de objeto y seriacion

– Tipos de datos varios

– Estructuras

– Clases de soporte

– Plantillas de colecciones

– Soporte OLE

– Sincronizacion

Page 8: Leccion 1 Visual C++

8

Notación HúngaraNotación Húngara

Convenios para nombrar las variables Consiste en hacer que el nombre de una variable

empiece con una o más letras minúsculas que indiquen el tipo de dato

Por ejemplo m_pszAppName se trata de un dato miembro de una clase, definido como puntero a una cadena de caracteres terminada con el carácter nulo.

c:char, by:byte,n:short,i:int, b:bool, w:word, l:long, dw:DWord, fn:función, s:cadena de caracteres, a:array, p:puntero, h:handle, m_:miembro de una clase, C:clase, ID:identificador

Page 9: Leccion 1 Visual C++

9

Arquitectura de una aplicaciónArquitectura de una aplicación La biblioteca MFC permite construir aplicac. SDI y MDI Una SDI permite tener abierta una ventana marco con su

vista, para presentar el documento que tiene abierto, que es único por cada ejemplar activo.

Una MDI permite tener abiertas varias ventanas marco dentro de la ventana principal. O sea tiene una ventana marco principal dentro de la cual pueden abrirse varias ventanas marco hijas, de las cuales solo una estará activa. Ninguna de ellas tiene la barra de menú

Un único objeto Aplicación gestiona una o más plantillas de documento. Cada plantilla crea y gestiona uno o más documentos (SDI o MDI). El usuario ve y manipula un documento a través de la vista contenida dentro de la ventana marco

Page 10: Leccion 1 Visual C++

10

Análisis de una aplicaciónAnálisis de una aplicación Objeto Aplicación (CWinApp): iniciar, ejecutar y finalizar

la aplicación Objeto Plantilla de Doc (CDocTemplate): conecta un

objeto documento con sus vistas asociadas y con las ventanas marcos

Objeto Documento (CDocument): almacena los datos de la aplicación Archivo – Abrir, Archivo – Cerrar

Objeto Ventana Marco (CFrameWnd): proporcionan a las vistas, los controles estándar de una ventana, o sea el marco, la barra de título, menú de control, barra maximizar, etc.

Objeto Vista (CView): la ventana que hace de interfaz entre el usuario y los datos del documento.

Page 11: Leccion 1 Visual C++

11

La Clase AplicaciónLa Clase Aplicación

En nuestro ejemplo CSaludoApp está en saludo.h Class CSaludo: public CWinApp

{ public: CSaludoApp( );virtual BOOL InitInstance( );

//...afx_msg void OnAppAbout( );

} Función virtual: se espera sobreescribirla

Page 12: Leccion 1 Visual C++

12

La clase Ventana MarcoLa clase Ventana Marco

class CMainFrame : public CFrameWnd{ protected: CMainFrame( );

DECLARE_DYNCREATE(CMainFrame)CStatusBar m_wndStatusBar;CToolBar m_wndToolBar;

} Hereda la funcionalidad para procesar cualquier mensaje

Windows al manipular la ventana. Por ejemplo, modificar su tamaño, maximizarla, moverla

Con DECLARE_DYNCREATE se puede crear objetos dinámicamente

Page 13: Leccion 1 Visual C++

13

La clase DocumentoLa clase Documento class CSaludoDoc: public CDocument

{ protected: CSaludoDoc( );DECLARE_DYNCREATE(CSaludoDoc)

char *m_Mensaje;//operations

public: char *GetMensaje( ) {return m_Mensaje;}}

Cuando se quiere añadir un nuevo dato, se añade un dato miembro a la clase. (Ej. m_Mensaje)

Hay 2 funciones que se redefinen: OnNewDocument y Serialize. (Abrir – Nuevo y cuando es cargado o guardado)

Page 14: Leccion 1 Visual C++

14

La clase VistaLa clase Vista Class CSaludoView: public CView

{ protected: CSaludoView( );DECLARE_DYNCREATE(CSaludoView)public: CSaludoDoc *GetDocument( );//overridespublic: virtual void OnDraw(CDC * pDC);virtual BOOL PreCreateWindow( );//...DECLARE_MESSAGE_MAP( )

} Cuando ocurre un evento, hay que redibujar la vista (OnDraw). Tenemos

un puntero al documento de la vista que después usa para llamar a la función GetMensaje

Page 15: Leccion 1 Visual C++

15

Labor del programador al Labor del programador al escribir sobre la clase Vistaescribir sobre la clase Vista

Implementar una plantilla de visualización para los datos del documento: Editor de Diálogos

Redefinir la función OnDraw para que dibuje los datos del documento

Conectar los objetos de la interfaz del usuario (botones, cajas) con los mensajes Windows: ClassWizard

Escribir las funciones miembro para manipular los mensajes a los que nos hemos referido

Page 16: Leccion 1 Visual C++

16

Jerarquías de las VentanasJerarquías de las Ventanas Cada ventana tiene una ventana padre, y cero o más ventanas

hermanas (siblings) La raíz de las ventanas es el Escritorio Una ventana de nivel superior no tiene padre o su padre es el

Escritorio Una ventana padre de una hija (Child) es una ventana de nivel

superior en jerarquía. Ej. un botón es ventana hija de la ventana diálogo.

Una vista es ventana hija de la ventana marco Una ventana puede tener un propietario. Ej. la ventana principal es

propietaria de la ventana de Diálogo. La ventana padre de ambas es el Escritorio (son hermanas)

Una ventana propiedad de otra aparece siempre encima de su propietaria y desaparece si su propietaria es minimizada

Page 17: Leccion 1 Visual C++

17

AplicacionesAplicaciones

Conversión de Temperaturas: Conver– Saber en cual caja texto hemos ingresado nuevo valor– Clic del botón principal Aceptar– Enfocar un objeto al iniciar la ejecución – Visualizar Fecha y hora– Botones de pulsación: +1

Page 18: Leccion 1 Visual C++

18

AplicacionesAplicaciones Diseño de una Calculadora: Calcu

– Crear la interfaz y colocar sus propiedades– Dígitos 0..9: concatenar los números– Foco inicial y valor de pantalla inicial y corregir “0.” Inicial– Punto Decimal: definición de variable, inicialización y código OnPuntod– Declarar m_cOperador para recordar la operación, m_Operando1 para el primer número– Definición de función OnOperador– Operación del Tanto por ciento– La Tecla C de borrado total o iniciar la calculadora OnIniciar– La Tecla CE de borrar el último dato: OnBorrarEntrada– Caso especial del signo Menos al inicio: modificar OnOperacion– Fuente para las letras de la caja de texto IDC_Pantalla– Color al fondo de la IDC_Pantalla: OnCtlColor

Page 19: Leccion 1 Visual C++

19

AplicacionesAplicaciones Crear controles durante la ejecución: Controles

– Crear los objetos y establecer sus propiedades; el boton IDC_TANTOPC67 se oculta en InitialUpdate

– Función miembro OnTantoPC– Cuando ingresamos una cantidad mayor a 100000000 se crea el

botón de 54% y se visualiza el de 67%:Se define *m_pTantopc54 en CControlesView y Se inicializa

en el constructorSe define en Resource.h el ID del botón de 54%, en el mapa

de mensajes Implementar OnChangeCantidad en respuesta el evento

ChangeCambiar lo que falta en OnChangeCantidad para visualizar el

botón del 67%