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 | 831 |