c++ windows winapi menu submenu

c++ - Creando un submenĂș



windows winapi (2)

Primero, crea un nuevo menú y agrega elementos a él. Por ejemplo:

HMENU hSubmenu = CreatePopupMenu(); // Insert or append items to hSubmenu here

A continuación, agregue el menú creado en hMenu:

AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT_PTR)hSubmenu, "My Submenu");

Quiero hacer un submenú como este submenú de Mozilla Firefox:

Así es como es ahora (en mi programa):

Pero quiero que se vea como Firefox si tiene un menú adicional cuando tienes el mouse sobre él.

#define ID_SM 1 LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: HMENU hMenubar = CreateMenu(); HMENU hMenu = CreateMenu(); AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, "Menu"); AppendMenu(hMenu, MF_STRING, ID_SM, "Sub Menu"); /* Would I put it here? How? */ SetMenu(hwnd, hMenubar); break; case WM_COMMAND: if (LOWORD(wParam) == ID_SM) { /* Not sure if this should be here, cause I want it to pop up when you mouse over */ } break; } }


Usted acaba de crear otro menú y anexarlo como un submenú. Puede hacer esto llamando a la misma función AppendMenu , solo necesita establecer el parámetro MF_POPUP en MF_POPUP y pasar el manejador al submenú como el parámetro uIDNewItem .

Por ejemplo, algo como:

case WM_CREATE: HMENU hMenubar = CreateMenu(); HMENU hMenu = CreateMenu(); HMENU hSubMenu = CreatePopupMenu(); AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, "Menu"); AppendMenu(hMenu, MF_STRING, ID_SM, "Sub Menu"); AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenu, "Sub-Sub Menu"); SetMenu(hwnd, hMenubar); break;

No necesita hacer nada especial en respuesta al mensaje WM_COMMAND . Windows mostrará automáticamente el menú emergente cuando pase el mouse sobre el elemento del menú principal. Sin embargo, necesitará manejar los comandos de los elementos que se muestran en el submenú.