Gestión de recursos
A lo largo del programa necesitaremos usar a algunos recursos. Ya hemos resuelto los referentes a los gráficos de los naipes, máscaras, icono, cursor... Pero necesitaremos algunos otros, que incorporaremos a nuestro fichero de recursos.
Menú
Como es lógico, usaremos un menú para acceder a las funciones y opciones de nuestro programa.
Como también usaremos aceleradores, añadiremos la información, al menos para algunos de ellos, a las opciones de menú que dispongan de un acelerador.
Para el caso de las opciones de "Deshacer" y "Ayuda", usaremos un espacio como separador entre el texto del menú y el acelerador. Para la opción de "Nueva partida", usaremos el separador '\a'.
Menu MENU BEGIN POPUP "&Juego" BEGIN MENUITEM "&Nueva partida\aF2",CMD_NUEVO MENUITEM "&Opciones...",CMD_OPCIONES MENUITEM SEPARATOR MENUITEM "S&obre...",CMD_SOBRE MENUITEM SEPARATOR MENUITEM "&Salir",CMD_SALIR END MENUITEM "&Deshacer ^Z",CMD_DESHACER MENUITEM "&Ayuda F1",CMD_AYUDA END
Aceleradores
Por supuesto, no basta con poner un texto en el menú para definir un acelerador, también hay que crear una tabla de aceleradores, cargarla y modificar el bucle de mensajes de la aplicación para que se procesen adecuadamente.
Nuestra tabla de aceleradores será:
Aceleradores ACCELERATORS BEGIN VK_F2, CMD_NUEVO, VIRTKEY "^Z", CMD_DESHACER VK_F1, CMD_AYUDA, VIRTKEY END
Para cargarla usaremos las sentencias siguientes:
HACCEL hAcelerador; /* Manupulador de aceleradores */ ... hAcelerador = LoadAccelerators(hThisInstance, "Aceleradores"); ...
Y modificaremos el bucle de mensajes para procesar los aceleradores:
while (TRUE == GetMessage (&messages, NULL, 0, 0)) { if(!TranslateAccelerator(hwnd, hAcelerador, &messages)) { /* Traducir mensajes de teclas virtuales a mensajes de caracteres sólo si TranslateAccelerator regresa con nulo */ TranslateMessage(&messages); /* Enviar el mensaje a WindowProcedure */ DispatchMessage(&messages); } }
Diálogos
Necesitamos tres cuadros de diálogo diferentes: uno de opciones, que permitirá al usuario seleccionar el gráfico para el dorso de los naipes. Otro para mostrar los datos sobre el programa, versión y el autor. Un tercero para mostrar un texto de ayuda.
Tabla de cadenas de texto
Los textos que usemos durante el programa para mostrar mensajes, los almacenaremos en una "string table":
STRINGTABLE BEGIN ID_TITULO, "Solitario" ID_RESUELTO, "Enhorabuena, has resuelto el juego." ID_SINSOLUCION, "El juego no tiene solución." ID_CARTASMAZO, "Cartas en mazo %d" ID_CARTASMONTON, "Cartas en montón %d" ID_CARTASCOLOCADAS, "Cartas colocadas %d" END
El programa
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ficheros fuente | solitario.zip | 2011-11-09 | 48642 bytes | 528 |