Sistemas operativos modernos

ció el programa, aunque no se haya iniciado desde una h'nea de comandos. El cuarto paráme­ tro, iCmdShow, indica si la ventana inicial del programa debe ocupar toda la pantalla, una par­ te de ésta o nada (sólo en la barra de tareas). Esta declaración ilustra una convención de Microsoft muy utilizada, la notación húngara. El nombre es una referencia humorística a la notación polaca, el sistema posfijo inventado por el lógico polaco J. Lukasiewicz para representar fórmulas algebraicas sin ufilizar precedencias ni paréntesis. La notación húngara fue inventada por un programador húngaro de Microsoft, Char­ les Simonyi, y utiliza los primeros caracteres de un identificador para especificar el tipo. Las le­ tras y tipos permitidos son, entre otros, c (carácter), w (palabra, que ahora se refiere a un entero de 16 bits sin signo), i (entero de 32 bits con signo), l (long, también un entero de 32 bits con signo), s (cadena), sz (cadena terminada con un byte cero), p (apuntador), fn (función) y h (idenfificador). Así, por ejemplo, szCmd es una cadena que termina con Oe iCmdShow es un entero. Muchos programadores creen que incorporar el tipo en los nombres de variable de es­ ta manera no sirve de mucho y hace al código para Windows excepcionalmente difícil de leer. En UNIX no hay nada análogo a esta convención. Toda ventana debe tener asociado un objeto de clase que define sus propiedades. En la fi­ gura 5-41 el objeto de clase es wndclass. Un objeto de tipo WNDCLASS tiene 10 campos, a cua­ tro de los cuales se les asignan valores iniciales en la figura 5-41. En un programa real, también se asignarían valores a los otros seis. El campo más importante es IpJhWndProc, que es un apun­ tador largo (es decir, de 32 bits) a la función que procesa los mensajes dirigidos a esta ventana. Los demás campos que reciben valores iniciales aquí indican cuál nombre e icono debe usarse en la barra de título y cuál símbolo debe usarse para el puntero del ratón. Una vez asignados valores iniciales a wndclass, se invoca a RegisterClass para pasar el ob­ jeto a Windows. En particular, una vez realizada esta llamada, Windows sabrá cuáles procedi­ mientos debe invocar cuando se presenten diversos sucesos que no pasan por la cola de mensajes. La siguiente llamada, CreateWindow, asigna memoria para la estructura de datos de la ventana y devuelve un identificador para poder referirse a ella después. Luego el progra­ ma efectúa dos llamadas seguidas para colocar el contorno de la ventana en la pantalla y lle­ narla por completo. Ahora llegamos al ciclo principal del programa, que consiste en obtener un mensaje, hacer­ le ciertas traducciones y devolverlo a Windows para que éste invoque a WndProc y lo procese. Para contestar la pregunta de si todo este mecanismo podría haberse hecho más sencillo, la res­ puesta es afirmativa, pero se hizo de esta manera por razones históricas y no nos queda más que aceptarlo. Después del programa principal viene el procedimiento WndProc, que procesa los diver­ sos mensajes que pueden enviarse a la ventana. El uso de CALLBACK aquí, como el de WINA- P1 antes, especifica la sucesión de llamadas que se usará para los parámetros. El primer parámetro es el identificador que usará la ventana. El segundo parámetro es el tipo de mensa­ je. Los parámetros tercero y cuarto pueden servir para proporcionar información adicional, en caso de necesitarse. Los tipos de mensaje WM_CREATE y WM_DESTROY se envían al principio y al final del programa, respectivamente. Ofrecen al programa la oportunidad de, por ejemplo, asignar me­ moria a estructuras de datos y luego liberarla.

RkJQdWJsaXNoZXIy MjI4NDcx