c++ win32 динамическое меню - какой пункт меню был выбран

У меня есть приложение win32 (c++), в котором есть контекстное меню, привязанное к правому клику на иконке уведомления. Пункты меню/подменю динамически создаются и изменяются во время выполнения.

 InsertMenu(hSettings, 0, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR) hDevices, L"Setting 1");
 InsertMenu(hSettings, 1, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR) hChannels, L"Setting 2");

 InsertMenu(hMainMenu, 0, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR) hSettings, L"Settings");
 InsertMenu(hMainMenu, 1, MF_BYPOSITION | MF_STRING, IDM_EXIT, L"Exit"); 

В приведенном выше коде hDevices и hChannels являются динамически создаваемыми подменю. Динамические меню создаются следующим образом:

   InsertMenu(hDevices, i, style, IDM_DEVICE, L"Test 1");
   InsertMenu(hDevices, i, style, IDM_DEVICE, L"Test 2");
   InsertMenu(hDevices, i, style, IDM_DEVICE, L"Test 3");

Есть ли способ узнать, какой пункт был нажат без необходимости определять для каждого пункта подменю свой собственный ID (IDM_DEVICE в приведенном выше коде)? Я хотел бы определить, что пользователь кликнул на подменю IDM_DEVICE и что он кликнул на первый пункт (Test 1) в этом подменю.

Я хотел бы добиться чего-то вроде этого:

  case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    // Parse the menu selections:
    switch (wmId)
    {
        case IDM_DEVICE: // user clicked on Test 1 or Test 2 or Test 3 
            UINT index = getClickedMenuItem(); // get the index number of the clicked item (if you clicked on Test 1 it would be 0,..) 
                            // change the style of the menu item with that index 
            break;          
    }
5
задан blejzz 24 September 2011 в 20:33
поделиться