Hola Complicado Mundo OpenGL-Win32
CREAR LA VENTANA WIN32
Para crear la ventana es necesario llenar el WNDCLASS, registrarlo y finalmente crear la ventana. El WNDCLASS
WNDCLASS Cwnd; hInstance = GetModuleHandle(NULL); Cwnd.style = CS_OWNDC; Cwnd.lpfnWndProc = (WNDPROC) WndProc; Cwnd.cbClsExtra = 0; Cwnd.cbWndExtra = 0; Cwnd.hInstance = hInstance; Cwnd.hIcon = NULL; Cwnd.hCursor = LoadCursor(NULL, IDC_ARROW); Cwnd.hbrBackground = NULL; Cwnd.lpszMenuName = NULL; Cwnd.lpszClassName = "OpenGL"; RegisterClass(&Cwnd); hWnd=CreateWindow( "OpenGL", "Hola Mundo", WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN ,100, 100, VENTANA_ANCHO, VENTANA_ALTO, NULL, NULL, hInstance, 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:
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
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
)
-
http://http.//dedolog.blogspot.com Debor
-
http://dedolog.blogspot.com Debor
-
Martin_395
-
miguel365