Arquitectura del Sistema Windows © Dr. José Antonio Garrido Natarén 2016
Arquitectura del Sistema Windows Los 3 Componentes (USER - KERNEL – GDI) La creación de una ventana El lazo de mensajes La función principal de una ventana (Windows Procedure) Los mensajes WM_CREATE, WM_PAINT & WM_DESTROY La gestión de los recursos máquina (ratón, teclado, pantalla) El estilo de una ventana Las áreas cliente y no cliente Programa de un documento (SDI) & Programa de múltiples Documentos (MDI) Tipos de ventanas (main, Child, Overlapped, Popup) Los Mensajes La evolución SDK a MFC
Arquitectura del Sistema Windows Los 3 Componentes del Sistema Windows USER Kernel GDI
Arquitectura del Sistema Windows USER El Módulo USER realiza la administración de la Entrada/Salida del teclado, ratón y todas los dispositivos de Entrada/Salida de la interface del usuario. También administra la interacción con el controlador de sonido y puertos.
Arquitectura del Sistema Windows KERNEL El módulo KERNEL proporciona la base del Sistema Operativo, incluyendo los servicios de Entrada/Salida de archivos, Gestión de la Memoria Virtual y Programación de multi-tareas (task scheduling).
Arquitectura del Sistema Windows GDI El módulo GDI proporciona las funciones para generar las salidas graficas para pantallas, impresoras y en general para todos dispositivos gráficos de salida. El módulo GDI proporciona una abstracción del dispositivo de salida
Arquitectura del Sistema Windows GDI Application Funciones Gráficas GDI 64 User Mode Kernel Mode Graphics Engine ( GDI ) Graphics Driver
Ciclo de Vida de una Aplicación Windows VIDA, OBRA Y MUERTE DE UNA VENTANA
Ciclo de Vida de una Aplicación Windows El programa Windows mas pequeño Un programa MS-Windows se crea con la función: INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow) { return 0; // No hace nada } … y muere cuando regresa
Ciclo de Vida de una Aplicación Windows Un programa Windows mas largo… INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow) { CreateWindow(ClassName, WindowName, dwStyle, x , y, nWidth, Height, WndParent, …); While(&Msg,NULL,0,0) TranslateMessage(&Msg); DispatchMessage(&Msg); } return 0; // termina
Ciclo de Vida de una Aplicación Windows La larga vida de una ventana Una ventana se crea con la función: CreateWindow(ClassName, WindowName, dwStyle, x , y, nWidth, Height, WndParent, …); y se cicla en un lazo infinito… … While(&Msg,NULL,0,0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } y muere cuando sale del lazo…
Ciclo de Vida de una Aplicación Windows La función de una ventana El corazón de una ventana es la función: WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch ( msg ) { case WM_CREATE: { } case …. Default: return defWindowProc(hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
Ciclo de Vida de una Aplicación Windows La función default de una ventana La función por default de Windows responde a TODOS los mensajes. INT defWindowProc (hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
Ciclo de Vida de una Aplicación Windows La vida de una ventana Una ventana vive tratando mensajes Existen miles de mensajes
Ciclo de Vida de una Aplicación Windows La Notificación de nacimiento de una ventana El primer mensaje que recibe una ventana es el mensaje : WM_CREATE
Ciclo de Vida de una Aplicación Windows La imagen de una ventana Cuando una ventana necesita ser dibujada la función de control WndProc recibe el mensaje : WM_PAINT
Ciclo de Vida de una Aplicación Windows La vida de una ventana Cuando una ventana cambia de tamaño la función de control WndProc recibe el mensaje : WM_SIZE
Ciclo de Vida de una Aplicación Windows El fin de una ventana Una ventana se muere cuando recibe el mensaje WM_DESTROY Una ventana se puede auto destruir mandándose el mensaje WM_DESTROY
Ciclo de Vida de una Aplicación Windows LOS ESTILOS DE UNA VENTANA
Ciclo de Vida de una Aplicación Windows Los estilos de una ventana Un estilo define un aspecto y comportamiento de una ventana Cada ventana tiene su propio estilo Muchas ventanas pueden tener el mismo estilo
Ciclo de Vida de una Aplicación Windows Los estilos de una ventana Ejemplos de estilos WS_BORDER Crea una ventana con un borde delgado WS_CAPTION Crea una ventana con una barra de titulo (incluye el estilo WS_BORDER). WS_CHILD Crea una ventana hija. Una ventana con este estilo no puede tener barra de menú. (este estilo es incompatible con el estilo WS_POPUP). WS_POPUP La venta es una Popup.
Arquitectura del Sistema Windows Los estilos de una ventana Ejemplos de estilos WS_SYSMENU La ventana tiene un menú sistema (WS_CAPTION debe definirse) WS_VISIBLE La ventana es visible WS_THICKFRAME La ventana tiene un borde para cambiarla de tamaño WS_MINIMIZEBOX La venta tiene un botón para minimizarla WS_MAXIMIZEBOX La venta tiene un botón para maximizarla
Arquitectura del Sistema Windows La función default de una ventana La función por default de Windows responde a TODOS los estilos. INT defWindowProc (hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
Arquitectura del Sistema Windows Las áreas de una ventana Una ventana tiene un Área Cliente un Área No Cliente
Arquitectura del Sistema Windows
Arquitectura del Sistema Windows Una interfaz SDI Una aplicación SDI permite solamente abrir un documento a la vez.
Arquitectura del Sistema Windows Una interfaz MDI Una aplicación MDI permite abrir varios documento a la vez.
Arquitectura del Sistema Windows Tipos de ventanas Main (ventana principal) Child (ventana hija) Overlapped (ventana superpuesta) Popup (ventana volátil)
Arquitectura del Sistema Windows Los Mensajes Existen mas de 1000 mensajes de uso común. Mensajes Windows.pdf
Arquitectura del Sistema Windows SDK .VS. MFC El Software Development Kid (SDK) escrito en lenguaje C de WIN64 y que permitía programar una aplicación windows se encapsuló en clases C++ (1994). Las clases de Windows se integraron en una librería llamada MFC (Microsoft Foundation Classes)
Arquitectura del Sistema Windows SDK .VS. MFC Los estilos y comportamientos de las ventanas se codificaron como funciones virtuales de una clase maestra llamada CObject. La clase de base de todas las ventanas es la clase CWnd
MFC (Parte 1)
MFC (parte 2)
MFC (parte 3)
Muchas Gracias