Windows USER es un subsistema para administrar ventanas y la interfaz de usuario del sistema operativo Windows , uno de los tres primeros componentes históricos de este sistema operativo.
Implementa un objeto de ventana (HWND), listas de ventanas, incluso por orden Z, y administración de regiones de recorte de ventana, tiene un amplio conjunto de llamadas para crear y administrar ventanas. También implementa la representación de un marco de ventana estándar (DefWindowProc) y varios elementos estándar de la interfaz de usuario (botones, casillas de verificación, botones de radio, barras de desplazamiento, listas, cuadros combinados y cuadros de diálogo con niños dentro).
Al crear una ventana (dos etapas: RegisterClass+CreateWindow, cuando se usan elementos de interfaz de usuario estándar, la primera etapa no es necesaria) se especifica lo siguiente: coordenadas, cadena (título o cadena al lado del botón), indicadores de estilo y el padre ventana. La llamada a RegisterClass también especifica un "procedimiento de ventana" (WNDPROC).
El tamaño y el orden Z de una ventana ya creada se controlan mediante llamadas especiales. En cuanto al control que depende del tipo de ventana (por ejemplo, marcar / restablecer una casilla de verificación o agregar líneas a la lista), se lleva a cabo llamando a SendMessage, donde se indican 2 códigos de mensaje (por ejemplo, WM_COMMAND+LB_ADDSTRING ) y un parámetro.
WNDPROC es una función implementada en la aplicación a la que el USUARIO llama cuando ocurren varios eventos en la vida de la ventana (para los elementos estándar de la interfaz de usuario, la función se implementa en el propio USUARIO o en la DLL donde se implementa el objeto, como COMCTL32.DLL ). A WNDPROC se le pasa HWND, código de mensaje ( WM_xxx) y 2 parámetros.
Es responsabilidad del desarrollador de WNDPROC omitir cualquier código de mensaje desconocido para él en DefWindowProc.
Mensajes principales:
El USUARIO utiliza activamente los llamados. Los recursos son datos de solo lectura incrustados en un archivo EXE/DLL de una manera especial en la etapa de construcción.
Los recursos en sí mismos no son parte de USER y se pueden usar sin él (por ejemplo, tabla de cadenas: tablas de cadenas para localizar una aplicación en diferentes idiomas), sin embargo, USER usa automáticamente algunos tipos de recursos (por ejemplo, descripciones de menús y cuadros de diálogo que enumeran, por ejemplo, todos los controles internos de este cuadro de diálogo y sus coordenadas y líneas).
Al desarrollar un programa, los recursos se colocan en un archivo de texto con el sufijo .rc, escrito en un lenguaje sencillo. Al mismo tiempo, hace mucho tiempo había herramientas para editar visualmente descripciones de diálogos y menús.
Al crear un programa, el compilador RC.EXE compila .rc en un archivo binario .res, que luego se cose en un archivo EXE/DLL mediante el programa LINK.
Al crear una ventana, puede especificar el identificador del recurso donde se encuentra la descripción del menú superior de la ventana, y el USUARIO creará y dibujará el menú automáticamente y enviará WM_COMMAND con el código del elemento del menú a la ventana cuando se selecciona el elemento.
El contenedor de C++ más popular alrededor de USER ha sido MFC durante mucho tiempo y todavía se usa en la actualidad. La envoltura WTL también es popular .
Toda la tecnología USER, que tiene unos 25 años, está siendo sustituida paulatinamente por Windows Presentation Foundation ( WPF ), en la que, por ejemplo, se ha sustituido el lenguaje de recursos por un XAML mucho más rico , y cualquier elemento gráfico vectorial o incluso un ventana puede ser un objeto que puede recibir eventos con una película mostrada a través de DirectShow .
win32k.sys (niveles inferiores, incluidas las listas de ventanas y sus regiones de recorte) y user32.dll (llamadas accesibles a la aplicación, DefWindowProc y elementos estándar).
Según algunas afirmaciones (de quienes han visto el código fuente ilegal), el código fuente del USUARIO está escrito en un estilo monstruoso y contiene modificaciones menores para admitir aplicaciones específicas como PowerPoint .
De la misma manera, este código nunca se ha vuelto a escribir en 25 años, y tal vez esta sea una tarea poco realista en términos de mantener la compatibilidad de las aplicaciones.
Además, hay consideraciones que no requieren información del código ilegal.
El uso de WNDPROC con una declaración de cambio para todos los códigos de mensaje se ve extremadamente feo (este problema se resuelve en todos los envoltorios de C++).
Hay un concepto de un cliente y un área de no cliente en una ventana: el interior de la ventana y el marco (generalmente estándar). Esto da como resultado dos conjuntos de códigos de mensaje para el interior y el marco: representación, teclado, mouse, etc. Además, no hay una separación arquitectónica del marco y el interior, lo que dificulta la implementación de los principios arquitectónicos de MVC .
Sin embargo, el problema ya está resuelto en MFC: se crea una ventana interior separada, que se mueve automáticamente cuando se mueve el marco, y en la que se dibuja todo lo que la aplicación quiere dibujar. La ventana interior se llama vista y, en esta arquitectura, MVC ya es fácil de implementar. Dicha vista puede, por ejemplo, reutilizarse utilizando la tecnología OLE en un documento anidado.
La notación húngara se utilizó por primera vez en USER: el inventor de la notación, Charles Simonyi, fue el principal desarrollador de este componente.
Los niveles superiores de la tecnología X11 utilizados en sistemas operativos similares a UNIX, como Linux , así como los niveles inferiores de las tecnologías KDE y Gnome (en los mismos sistemas operativos).