by Antonio Linares » Tue Nov 21, 2006 12:23 pm
Juan José, Javier,
Los menus en Pocket PC no están practicamente documentados por Microsoft, y son un poco liosos. Teneis un ejemplo en tutor03.rc y tutor03.prg:
1. No se pueden crear desde código. Siempre hay que definirlos en el fichero de recursos.
2. En el fichero de recursos se usan TRES partes para crearlos:
1a parte:
#ifdef _CE
102 RCDATA
BEGIN
102, 2,
I_IMAGENONE, 202, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, 202, 0, 0,
I_IMAGENONE, 203, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, 203, 0, 1,
END
#endif
Usamos ese #ifdef porque los editores de recursos habituales no saben interpretar esos valores. RCDATA significa "datos adicionales". Hay que darle el mismo número que tenga el menu (102), y se repite nuevamente después de BEGIN.
A continuación viene el valor 2, que indica cuantos menuitems tiene. A más menuitems, hay que aumentar ese valor.
Cada menuitem termina en 0, salvo el último que termina en 1.
El texto de cada menuitem no se especifica ahí, sino que se indica por un número. En este caso 202 y 203. Esos valores se buscan en una tabla de cadenas que hay que declarar a continuación:
2a parte:
STRINGTABLE DISCARDABLE
BEGIN
202 "First"
203 "Second"
END
Por último viene la definición del menú:
3a parte:
102 MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "it works", 100
END
POPUP ""
BEGIN
MENUITEM "Test", 110
END
END
Fijaros en que usa el valor 102 que es el mismo que usa su RCDATA. Cada menuitem tiene un número (100, 110) que es él identificador del menuitem y que usaremos desde el PRG:
DEFINE MENU oMenu RESOURCE 102 // Usa el menu 102
REDEFINE MENUITEM ID 100 OF oMenu ACTION MsgInfo( "MenuItem action" ) WHEN .f. // Define la acción para el menuitem código 100
REDEFINE MENUITEM ID 110 OF oMenu ACTION MsgAlert( "FWCE power!" ) // Define la acción para el menuitem código 110
Es un tanto lioso, pero es así como lo ha diseñado Microsoft para Windows Mobile y no tenemos otra forma de hacerlo.
Last edited by
Antonio Linares on Wed Nov 22, 2006 7:53 am, edited 1 time in total.