CREAR LA VENTANA WIN32

Para crear la ventana es necesario llenar el WNDCLASS, registrarlo y finalmente crear la ventana. El WNDCLASS

C++:
  1. WNDCLASS    Cwnd;                  
  2.  
  3. hInstance      = GetModuleHandle(NULL);      
  4. Cwnd.style    = CS_OWNDC;   
  5. Cwnd.lpfnWndProc    = (WNDPROC) WndProc;                   
  6. Cwnd.cbClsExtra       = 0;               
  7. Cwnd.cbWndExtra     = 0;       
  8. Cwnd.hInstance        = hInstance;                   
  9. Cwnd.hIcon    = NULL;   
  10. Cwnd.hCursor            = LoadCursor(NULL, IDC_ARROW);   
  11. Cwnd.hbrBackground   = NULL;                       
  12. Cwnd.lpszMenuName   = NULL;       
  13. Cwnd.lpszClassName   = "OpenGL";                           
  14.  
  15. RegisterClass(&Cwnd);                        
  16.  
  17. hWnd=CreateWindow(
  18. "OpenGL",
  19.     "Hola Mundo",
  20.     WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
  21.     ,100, 100,
  22.     VENTANA_ANCHO,
  23.     VENTANA_ALTO,
  24.     NULL,            
  25.     NULL,            
  26.     hInstance,     
  27.     NULL);

La función GetModuleHandle() obtiene un identificador para la aplicación actual.

Los datos de la estructura WNDCLASS son los siguientes:

WNDCLASSS
{
UINT style : Estilo de la aplicación, en este caso se quiere un DC propio (CS_OWNDC)
WNDPROC lpfnWndProc : Manejador de mensajes
int cbClsExtra : Bytes extra para la estructura
int cbWndExtra : Bytes extra para la clase
HINSTANCE hInstance : Instancia de la aplicación que crea la ventana
HICON hIcon : Icono de la ventana, al ser NULL, windows provee el icono por defecto.
HCURSOR hCursor : Cursor usado al pasar sobre la ventana, LoadCursor(NULL,IDI_ARROW) es el icono por defecto
HBRUSH hbrBackground : Color del fondo de la ventana,debido a que todo el espacio de la ventana va a estar ocupado por la ventana, este valor se provee como NULL
LPCTSTR lpszMenuName : Nombre del recurso que identifica el menú de la aplicación, es NULL ya que no se utiliza menú.
LPCTSTR lpszClassName : Nombre de la clase que se usara al registrarla.
}

El manejador de mensajes al que hace referencia es en este caso uno muy simple:

C++:
  1. LRESULT CALLBACK WndProc(HWND   hWnd,UINT uMsg,WPARAM wParam,LPARAM    lParam)
  2. {
  3.     switch (uMsg)                              
  4.     {
  5.         case WM_CLOSE:               
  6.         {
  7.             PostQuitMessage(0);      
  8.             return 0;                        
  9.         }
  10.     }
  11.     return DefWindowProc(hWnd,uMsg,wParam,lParam);
  12. }

Las entradas de esta función son:

HWND hWnd : Identificador de la ventana que recibe el mensaje
UINT uMsg : El mensaje
WPARAM wParam : Información adicional sobre el mensaje
LPARAM lParam : Información adicional sobre el mensaje

Esta función solo intercepta un mensaje, aquel que es enviado por el sistema para indicar a la aplicación que debe cerrarse (WM_CLOSE) y si es cualquier otro mensaje lo envía al DefWindowProc().

RegisterClass() registra una clase ventana, con los parámetros dados por un WNDCLASS, en este caso CWnd.

Es hora de crear una ventana a partir de la clase creada con el RegisterClass(), para esto se utiliza la función CreateWindow() cuyos parámetros son los siguientes:

HWND CreateWindow
(
LPCTSTR lpClassName : Nombre de la clase a partir de la cual se crea la ventana
LPCTSTR lpWindowName : Titulo de la ventana.
DWORD dwStyle : Estilo de la ventana, en este caso con titulo y borde (WS_OVERLAPED)
int x, : Posición x de la ventana
int y : Posición y de la ventana
int nWidth : Ancho de la ventana
int nHeight : Alto de la ventana
HWND hWndParent : Identificador de la ventana “padre”, en este caso NULL, ya que no tiene
HMENU menú : Identificador del menú de la ventana, en este caso NULL, ya que no tiene
HINSTANCE hInstance : Identificador de la aplicación poseedora de la ventana, en NT/2000/XP este valor es ignorado
LPVOID lpParam : Cadena con el parámetro a pasar al llamar el mensaje WM_CREATE. En este NULL, ya que no hay ningun parámetro a pasar
)

COMENTARIOS

Dejar un comentario

:mrgreen: :| :twisted: :arrow: 8O :) :? 8) :evil: :D :idea: :oops: :P :roll: ;) :cry: :o :lol: :x :( :!: :?: