0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
 #include <windows.h> // Fichero de inclusion para programas Windows   HINSTANCE IdAplicacion; // Para guardar el identificador del programa HWND IdVentana; // Para guardar el identificador de la ventana  //------------------------------------------------------------------ // Funcion para controlar lo que ocurre en la ventana segun los eventos // que vienen de Windows. Mas tarde se asocia a la ventana que crearemos. // De momento solo interceptamos la tecla ESC para poder salir del // programa cuando queramos y el evento de destruccion de ventana con el // que terminamos la aplicacion LRESULT FAR PASCAL ProcesaMensajes(HWND Ventana, UINT Mensaje, WPARAM wParam, LPARAM lParam) { switch(Mensaje) // Según el mensaje recibido { case WM_KEYDOWN: // Caso de mensaje de pulsación de una tecla // y segun el contenido de la variable wParam switch(wParam) { case VK_ESCAPE: // ESC causa la salida del programa // Funcion para enviar mensaje de cerrado a la ventana // y despues de la aplicacion PostMessage(Ventana, WM_CLOSE, 0, 0); break; } break;  // Mensaje de destrucción de la ventana (provocado por // nosotros al pulsar ESC o cerrar la ventana. case WM_DESTROY:  PostQuitMessage(0); // Funcion para salir del programa break; } // Efectuar el proceso por defecto del mensaje (si viene // cualquier mensaje que no hemos usado, querremos que haga // lo que suele hacer) return DefWindowProc(Ventana, Mensaje, wParam, lParam); } // fin ProcesaMansajes //------------------------------------------------------------------   //------------------------------------------------------------------ // Funcion principal de un programa Windows // (como main en C normal, aqui WinMain) // el programa empieza a ejecutarse a partir de esta funcion. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { // Para que no moleste al compilar, no lo usamos. UNREFERENCED_PARAMETER(lpszCmdLine); // Guardo el identificador del programa, luego lo usamos. IdAplicacion = hInstance;  // Declaramos un tipo de ventana, el nuestro. WNDCLASS ClaseVentana;  //Definimos nuestro tipo de ventana...  // Se redibujara si cambia el tamaño de la ventana // horizontal y verticalmente, y un solo DC (device context) // para cada ventana (para cuando empezemos con OpenGL) ClaseVentana.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // La definimos antes para contolar // los mensajes como los del teclado. ClaseVentana.lpfnWndProc = ProcesaMensajes; // Sin memoria extra para la clase. ClaseVentana.cbClsExtra = 0; // Sin memoria extra para la ventana. ClaseVentana.cbWndExtra = 0; // Identificador del programa para asociar // esta ventana con este programa. ClaseVentana.hInstance = IdAplicacion; // De momento pasamos de icono. ClaseVentana.hIcon = NULL; // Flecha normal de raton. ClaseVentana.hCursor = LoadCursor(NULL, IDC_ARROW); // Por ahora ponemos el fondo blanco. ClaseVentana.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Pasamos de menu. ClaseVentana.lpszMenuName = NULL; // Nombre de la clase (la "L" antes de la cadena es // por que solo admite cadenas de caracteres // unicode -LPCWSTR o TCHAR- y con la "L" se convierte). ClaseVentana.lpszClassName = L"UnSitioWeb";  // Registramos nuestro tipo de ventana. RegisterClass(&ClaseVentana);  // Funcion que crea la ventana. Guardamos el identificativo. IdVentana = CreateWindowEx( WS_EX_APPWINDOW, // estilo extendido de ventana L"UnSitioWeb", // Nombre de la clase puesto antes //(la "L" antes para convertir a UNICODE) L"Un Sitio Web", // Titulo que aparecera en la ventana. // Parametros de como sera la ventana, // se pueden combinar varios. WS_POPUPWINDOW|WS_CAPTION|WS_MINIMIZEBOX, 100, // Posicion Horizontal. 100, // Posicion Vertical. 600, // Ancho de la ventana. 450, // Alto de la ventana. (HWND) NULL, // No depende de otra ventana. // No le damos un menu diferente al de la clase // (que es ninguno). (HMENU) NULL, // Identificador del programa al que pertenece // la ventana. Al empezar lo guardamos en una // variable para usarlo despues. IdAplicacion, // Puntero a "no se que" datos (pasamos del tema, // es para aplicaciones MIDI). (LPVOID) NULL );    ShowWindow(IdVentana, SW_SHOW); // Mostramos nuestra ventana. // La actualizo para que muestre lo que tenga que // mostrar (ahora nada). UpdateWindow(IdVentana);  // Este es el bucle habitual de windows que se esta // ejecutando continuamente hasta que recibe el mensaje // de acabar (ya lo hemos preparado en la funcion // "ProcesaMensajes" asociada a la ventana, tambien // asociada a este programa atraves de su identificativo).  // Varible para contener los mensajes que van llegando. MSG Mensaje; while(TRUE) // Se ejecuta continuamente. { // Exploramos la cola de mensajes. if(PeekMessage(&Mensaje, NULL, 0, 0, PM_NOREMOVE)) {// procesándolos adecuadamente if(!GetMessage(&Mensaje, NULL, 0, 0)) // En este caso terminamos. return (int)Mensaje.wParam;  TranslateMessage(&Mensaje); DispatchMessage(&Mensaje); } // en caso contrario esperamos un mensaje. else WaitMessage(); }  } // fin WinMain //------------------------------------------------------------------  Â
|