Cambiar los textos de una barra de titulo

October 18th, 2006 chumy Leave a comment Go to comments

Supongamos un programa multidioma y al iniciarlo queremos que cambie la barra de menu dependiendo del idioma que escoja el usuario.

Asi pues definimos el elemento menu y un array para pasarle el texto. Tenemos declarado como manejador principal de la ventana la variable hWndPrincipal. Es el manejador que usamos cuando creamos la ventana principal.
MENUITEMINFO infoMenu;
char menutxt[256];

Ahora seteamos la estructura del menu a nuestro gusto insertandole el texto deseado.
strcpy(menutxt, "Archivo");
infoMenu.fMask = (MIIM_TYPE);
infoMenu.dwTypeData = menutxt;
infoMenu.cch = strlen(menutxt);
infoMenu.fType = MFT_STRING;
infoMenu.cbSize = sizeof(MENUITEMINFO);
SetMenuItemInfo(GetMenu(hWndPrincipal), 0, TRUE, &infoMenu);

En este ejemplo he pasado directamente la palabra “Archivo” pero podria haberla declarado en la tabla de strings y cargarla con LoadString.
LoadString(hInst, ESP_MENU_FILE, Menu_File, MAX_LOADSTRING);
strcpy(menutxt, Menu_File);

Siendo hInst, la instancia de la aplicación, ESP_MENU_FILE, la entrada en la talba de strings y Menu_File una variable. Tambien indicar que el 0 indica la posición del elemento en la barra de menu.

Para los submenus el proceso es identico a cualquier elemento, ya que cada submenu es un elemento diferenciado de la aplicación

SendDlgItemMessage(hDlg, IDC_SUBMENU1, WM_SETTEXT, NULL, (LPARAM) "Nuevo");

Siendo hDlg el manejador de la ventana y IDC_SUBMENU1 el elemento submenu a tratar.

Categories: General, WinAPI Tags: , , , ,

  1. October 19th, 2006 at 09:57 | #1

    Para los submenús (que en este caso son realmente ítems del menú) también hay otra forma, pequeño padawan.
    Se puede cargar una estructura MENUITEMINFO igual que como haces para un menú y a la hora de lanzar el “SetMenuItemInfo()” hacerlo del siguiente modo:

    SetMenuItemInfo(GetMenu(hWndPrincipal), IDC_SUBMENU1, FALSE, &infoMenu);

    ¿Y has pensado en cuando te encuentras con un submenú desplegable, es decir, un ítem que tiene subítems?

    SetMenuItemInfo(GetSubMenu(GetMenu(hWndPrincipal), 2), 4, TRUE, &infoMenu);

    Que significaría algo así como seleccionar el submenú 4 (zero-based) del menú 2 (zero-based también).

  2. luis martinez
    November 27th, 2006 at 17:47 | #2

    la informacion que tienes aqui es muy interesante mi nombre es luis y estoy estudiando ingenieria de sistema, ya tengo un año; y me parece muy buena tu informacion ya que me mandaron a investigar sobre esto y aui lo explicas muy bien

  3. toust
    August 22nd, 2009 at 21:59 | #3

    Por lo menos a mi, a la hora de cambiar un subítem, no me funciona la API: SendDlgItemMessage.
    Yo lo he tenido que hacer con SetMenuItemInfo.

  1. No trackbacks yet.
CAPTCHA Image