| Mi Primera ventana en C++ |
|
|
|
| Escrito por Elmessias |
| Miércoles, 03 de Marzo de 2010 19:38 |
|
//----------------------------------------------------------------------------// // PULP PROGRAMMERS // //----------------------------------------------------------------------------// // INCLUDES ////////////////////////////////////// #include "windows.h" #include "windowsx.h" #include "stdlib.h" // CONSTANTES //////////////////////////////////// #define NOMBRE_CLASE_VENTANA "Mi_Clase" // Nombre de la ventana // GLOBALES //////////////////////////////////// HWND hWnd; // Handle de la ventana int nAncho = 400, nAlto = 300; // Tamaño de la ventana //------------------------------------------------------------------------------- // NOMBRE: WindowProc // DESCRIPCION: El manejador de mensajes para nuestra clase de ventana //-------------------------------------------------------------------------------
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg,WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_CREATE: // Cualquier función de inicialización podría incluirse aqui return(0); break; case WM_PAINT: return(0); break; case WM_DESTROY: // Cualquier función de cierre de la aplicación podría venir aqui PostQuitMessage(0); return(0); break; case WM_SIZE: // Extraemos el nuevo tamaño de la ventana nAncho = LOWORD(lparam); nAlto = HIWORD(lparam); return(0); break; } // Llamamos al manejador de mensajes por defecto para cualquier otra cosa return(DefWindowProc(hwnd, msg, wparam, lparam)); } //------------------------------------------------------------------------------ // NOMBRE: WinMain // DESCRIPCION: Punto de entrada en el programa. Define la clase de la ventana, // la crea y ejecuta el bucle principal. //------------------------------------------------------------------------------ int WINAPI WinMain(HINSTANCE hinstance, // Instancia a la aplicación HINSTANCE hprevinstance, // Instancia a la aplicación anterior LPSTR lpcmdline, // Cadena de la linea de comandos int ncmdshow) // Parametro de modo { WNDCLASSEX ClaseVentana; // Nuestra clase de ventana HWND hwnd; // Handle a nuestra ventana MSG msg; // Variable de mensaje ClaseVentana.cbSize = sizeof(WNDCLASSEX); ClaseVentana.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; ClaseVentana.lpfnWndProc = WindowProc; // Manejador de mensajes ClaseVentana.cbClsExtra = 0; // Información extra de clase ClaseVentana.cbWndExtra = 0; // Información extra de ventana ClaseVentana.hInstance = hinstance; // Handle de la aplicación ClaseVentana.hIcon = LoadIcon(NULL, IDI_WINLOGO); ClaseVentana.hCursor = LoadCursor(NULL, IDC_ARROW); ClaseVentana.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); ClaseVentana.lpszMenuName = NULL; // Sin menú ClaseVentana.lpszClassName = NOMBRE_CLASE_VENTANA; // Identificador ClaseVentana.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Icono pequeño // Registramos la clase if (!RegisterClassEx(&ClaseVentana)) return(0); // Ha habido un error al registrar la clase // Crea una ventana if (!(hwnd = CreateWindowEx(NULL, // Estilo extendido (NO USADO) NOMBRE_CLASE_VENTANA, // Identificador de la clase "Pulp Programmers", // Titulo de la ventana WS_OVERLAPPEDWINDOW | WS_VISIBLE, // Parametros de estilo CW_USEDEFAULT, CW_USEDEFAULT, // Posición incial nAncho, nAlto, // Tamaño inicial NULL, // Handle al padre (Escritorio) NULL, // Handle al menu (Ninguno) hinstance, // Handle a la aplicación NULL))) // Parametros extras (NO USADO) return(0); // Ha habido un error al crear la ventana
// Inicializamos las variables globales hWnd=hwnd; // AQUI IRÍA EL CODIGO DE INICIALIZACIÓN DEL JUEGO // Ejemplo: // InicializaOpenGL(); // InicializaEntrada(); // CargarJugadores(); // CargarMapa(); // BUCLE PRINCIPAL - Infinito (Solamente podemos salir si encontramos el mensaje WM_QUIT) while(TRUE) { // Chequeamos la cola de mensajes if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) // Salimos del bucle y cerramos la ventana break; TranslateMessage(&msg); DispatchMessage(&msg); // Le mandamos el mensaje al gestor de mensajes } // AQUI IRÍA EL CODIGO DEL BUCLE PRINCIPAL DEL JUEGO: // Ejemplo: // ComprobarEntrada(); // ActualizaJugador(); // RenderizaMapa(); ... } // AQUI IRÍA EL CODIGO SOBRE LA LIBERACIÓN DE LOS RECURSOS CONSUMIDOS // Ejemplo: // EliminarGL(); // EliminarTexturas(); // EliminarDInput(); ... // Volvemos a Windows. Este es el codigo de salida del mensaje WM_QUIT return(msg.wParam); } Lo podéis descargar de aquí |
| Última actualización el Miércoles, 03 de Marzo de 2010 20:01 |





