leccion 1 visual c++
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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.
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
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
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)
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
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
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
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
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
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%