Sistemas operativos modernos
El tercer tipo de mensaje, WM_PA1NT es una instrucción que indica al programa que lle ne la ventana. No sólo se invoca la primera vez que se dibuja la ventana, sino también con cier ta frecuencia durante la ejecución de éste. En contraste con los sistemas basados en texto, en Windows de éste no puede suponer que lo que dibujó en la pantalla permanecerá ahí hasta que él lo quite. Otras ventanas podrían superponerse a ésta, podrían bajar menús sobre ella, cua dros de diálogo y sugerencias podrían cubrir una parte de ella, etc. Cuando se quiten esos ele mentos, será preciso redibujar la ventana. La forma en que Windows ordena a un programa que redibuje una ventana es enviándole un mensaje WM_PAINT. Como gesto amable, Windows también proporciona información acerca de la parte de la ventana sobre la que se escribió, por si resulta más fácil regenerarla en vez de redibujarla toda. Windows puede pedir a un programa que haga algo de dos maneras. Una es poner un men saje en su cola de mensajes. Este método se utiliza para las entradas de teclado, las entradas de ratón y temporizadores vencidos. El otro mecanismo, el envío de un mensaje a la ventana, im plica que Windows invoque a WndProc en forma directa. Este método se usa para todos los de más sucesos. Puesto que se le notifica cada vez que termina de procesarse un mensaje, Windows puede abstenerse de emitir una nueva llamada mientras no haya terminado la anterior. Así se evi tan condiciones de competencia. Hay muchos tipos más de mensajes. Si se quiere evitar un comportamiento impredecible por la llegada de un mensaje inesperado, lo mejor es invocar a DefWindowProc al término de WndProc para dejar que el controlador predeterminado se ocupe de los demás casos. En síntesis, un programa de Windows generalmente crea una o más ventanas con un obje to de clase para cada una. Cada programa fiene asociada una cola de mensajes y un conjunto de procedimientos de manejo. En última instancia, el comportamiento del programa lo deter minan los sucesos que se presentan, los cuales son procesados por los procedimientos de ma nejo. Éste es un modelo muy disfinto de la perspectiva orientada a procedimientos que adopta UNIX. El dibujado de la pantalla propiamente dicho se maneja con un paquete que consiste en cientos de procedimientos agrupados para formar la interfaz gráfica de dispositivo (GDI; Graphics Device Intetface), la cual puede manejar texto y todo tipo de gráficos y está diseña da de modo que sea independiente de la plataforma y del dispositivo. Para poder dibujar en una ventana, un programa debe obtener primero un contexto de dispositivo, que es una estructura de datos interna con las propiedades de la ventana, como el tipo de letra usado, el color del tex to, el color del fondo, etc. Casi todas las llamadas a la GD I ufiUzan el contexto de disposifivo, sea para dibujar o para consultar o establecer las propiedades. Hay varias formas de obtener el contexto de dispositivo. Un ejemplo sencillo de su adqui sición y uso es hdc = GetDC(hwnd): TextOut(hdc, x, y, psText, ¡Length); ReleaseDC(hwnd, hdc); La primera instrucción obtiene un mango para un contenido de disposifivo, hdc. El segundo ufiliza el contexto de dispositivo para escribir una línea de texto en la pantalla, especificando
RkJQdWJsaXNoZXIy MjI4NDcx