winuser.h

Estructura WNDCLASSEX

La estructura WNDCLASSEX contiene información sobre una clase de ventana. Se usa con las funciones RegisterClassEx y GetClassInfoEx.

Es similar a la estructura WNDCLASS, tan sólo hay dos diferencias. WNDCLASSEX incluye el miembro cbSize, que especifica el tamaño de la estructura, y el miembro hIconSm, que contiene un manipulador a un icono pequeño asociado con la clase de ventana.

Definición

typedef struct _WNDCLASSEX {    // wc  
    UINT    cbSize; 
    UINT    style; 
    WNDPROC lpfnWndProc; 
    int     cbClsExtra; 
    int     cbWndExtra; 
    HANDLE  hInstance; 
    HICON   hIcon; 
    HCURSOR hCursor; 
    HBRUSH  hbrBackground; 
    LPCTSTR lpszMenuName; 
    LPCTSTR lpszClassName; 
    HICON   hIconSm; 
} WNDCLASSEX;

Descripción

cbSize: Especifica el tamaño, en bytes, de esta estructura. Hay que asignar a este miembro el valor sizeof(WINDOWCLASSEX). Hay que asegurarse de que este miembro ha sido asignado correctamente antes de llamar a GetClassInfoEx.

style: Es un entero de 16 bits que codifica el estilo de la clase de ventana. Estos bits se pueden combinar con la función OR (|), para obtener estilos con las características deseadas.

Estos valores pueden ser:

Estilo Acción
CS_BYTEALIGNCLIENT Hace que el área de cliente coincida con el límite de un byte en la dirección de las x. Esto mejora las prestaciones a la hora de pintar en la pantalla. Este estilo afecta tanto al ancho de la ventana como a su posición en la pantalla.
CS_BYTEALIGNWINDOW Lo mismo que el anterior, pero con el borde de la ventana, en lugar del área de cliente.
CS_CLASSDC Crea un DC (Contexto de Dispositivo) que será compartido por todas las ventanas de la misma clase. Ya que las clases de ventana son específicas de un proceso, es posible para muchos hilos o para aplicaciones multihilo crear una ventana de la misma clase. Cuando varias ventanas intenten acceder simultáneamente al DC, el sistema operativo permite sólo a una el acceso hasta que termina.
CS_DBLCLKS Envía los mensaje de doble-clic al procedimiento de la ventana, cuando el usuario hace doble-clic sobre una ventana de esta clase.
CS_GLOBALCLASS Permite a una aplicación crear una ventana de esta clase independientemente del valor de hInstance que se proporcione a CreateWindow o CreateWindowEx. Si no se especifica, el valor de hInstace debe ser el mismo que se uso para registrar la clase.
Se puede crear una clase global creando la clase de ventana en una biblioteca de enlace dinámico (DLL) y listando el nombre de la DLL en el registro bajo la siguiente clave:
HKEY_LOCAL_MACHINE\Software
\Microsoft\Windows NT\
CurrentVersion\Windows\APPINIT_DLLS

Cada vez que empieza un proceso, el sistema operativo carga las DLLs especificadas en el contexto del nuevo proceso iniciado antes de llamar a la función principal en ese proceso. La DLL debe registrar la clase durante su proceso de inicialización y debe especificar el estilo CS_GLOBALCLASS.
CS_HREDRAW Redibuja toda la ventana cada vez que un movimiento o cambio de tamaño cambia la anchura del área de cliente.
CS_NOCLOSE Deshabilita del comando de cerrar del menú del sistema.
CS_OWNDC Crea un DC único para cada ventana de esta clase.
CS_PARENTDC Asigna la región de recorte de la ventana hija a la de la ventana padre de modo que la hija puede pintar en la padre. Una ventana con el bit de estilo CS_PARENTDC recibe un contexto de dispositivo normal desde el caché de contextos de dispositivo del sistema. No proporciona a la ventana hija el contexto de dispositivo de la ventana padre o los valores del contexto de dispositivo. Especificar CS_PARENTDC mejora el comportamiento de la aplicación.
CS_SAVEBITS Guarda como mapas de bits los trozos de pantalla tapados por la ventana. Windows usará estos mapas de bits para reconstruir la pantalla cuando la ventana se elimine. Windows muestra los mapas en su lugar original y no envía el mensaje WM_PAINT de actualizar la ventana a las ventanas afectadas, siempre que la memoria usada por los mapas de bits no sea descartada ni otras acciones invaliden la imagen almacenada. Este estilo se usa normalmente con ventanas pequeñas como menús o diálogos que se muestran y son cerrados antes de que haya alguna actividad en la pantalla. Este estilo aumenta el tiempo necesario para mostrar la ventana, ya que Windows debe reservar memoria para guardar el mapa de bits.
CS_VREDRAW Redibuja toda la ventana cada vez que un movimiento o cambio de tamaño cambia la altura del área de cliente.

lpfnWndProc: Apunta al procedimiento de ventana. Ver información de la función WindowProc.

cbClsExtra: Especifica cuantos bytes extra se reservarán a continuación de la estructura de la clase. El sistema operativo inicializará estos bytes a cero.

cbWndExtra: Especifica cuantos bytes extra se reservarán a continuación de la instancia de la ventana. El sistema operativo inicializará estos bytes a cero. Si una aplicación usa la estructura WNDCLASS para registrar un cuadro de diálogo creado usando la directiva CLASS en un fichero de recursos, debe ser asignado a DLGWINDOWEXTRA.

hInstance: Identifica la instancia de la ventana a la que esta clase pertenece.

hIcon: Identificador del icono de la clase. Debe ser un manipulador de un recurso de tipo icono. Si es NULL, la aplicación debe mostrar un icono cuando el usuario minimice la ventana de la aplicación.

hCursor: Identificador del cursor de la clase. Debe ser un manipulador de recurso de tipo cursor. Si es NULL, la aplicación debe mostrar el cursor explícitamente cada vez que el usuario mueve el ratón sobre la ventana de la aplicación.

hbrBackground: Identificador del pincel para la clase. Puede ser un manipulador para un pincel físico que se usará para pintar el fondo de la ventana, o puede ser un valor de color. Si se trata de un valor de color debe ser uno de los siguientes colores estándar de sistema (se debe añadir el valor 1 al color elegido). Si se da un valor de color, se debe convertir a uno de los siguientes tipos de HBRUSH:

COLOR_ACTIVEBORDER
COLOR_ACTIVECAPTION
COLOR_APPWORKSPACE
COLOR_BACKGROUND
COLOR_BTNFACE
COLOR_BTNSHADOW
COLOR_BTNTEXT
COLOR_CAPTIONTEXT
COLOR_GRAYTEXT
COLOR_HIGHLIGHT
COLOR_HIGHLIGHTTEXT
COLOR_INACTIVEBORDER
COLOR_INACTIVECAPTION
COLOR_MENU
COLOR_MENUTEXT
COLOR_SCROLLBAR
COLOR_WINDOW
COLOR_WINDOWFRAME
COLOR_WINDOWTEXT

El sistema operativo elimina automáticamente el pincel de fondo de la clase cuando ésta se libera. Una aplicación nunca debe borrar estos pinceles, ya que la misma clase de ventana puede ser usada por varias instancias de la misma aplicación.

Si este miembro es NULL, la aplicación es la encargada de pintar el fondo del área de cliente cada vez que el sistema los requiera. Para determinar si el fondo debe ser actualizado, la aplicación puede procesar el mensaje WM_ERASEBKGND o comprobar el miembro fErase de la estructura PAINTSTRUCT que se actualiza con la función BeginPaint.

lpszMenuName: Puntero a una cadena terminada con cero que especifica un nombre de recurso de la clase menú, es el nombre con el que aparece en el fichero de recursos. Si se usa un entero para identificar el menú, hay que usar la macro MAKEINTRESOURCE. Si este miembro es NULL, las ventanas de esta clase no tendrán un menú por defecto.

lpszClassName: Apunta a una cadena o es un átomo. Si es un átomo, este debe estar previamente creado como global con una llamada a la función GlobalAddAtom. El átomo, un valor de 16 bits, debe ser la palabra de menor peso del parámetro lpszClassName; la palabra de mayor peso debe ser cero. Si lpszClassName es una cadena, especificará el nombre de la clase de ventana.

hIconSm: Manipulador a un icono pequeño que se asocia a la clase de ventana. Si este miembro es NULL, el sistema busca el recurso de icono especificado por el miembro hIcon un icono del tamaño adecuado para usarlo como icono pequeño.