Я пытаюсь создать многоуровневое всплывающее меню, используя win32 и следующий код:
HMENU CreateSubmenu(HMENU parentMenu, int index)
{
HMENU hSubMenu = CreatePopupMenu();
wchar_t buffer[256];
wsprintfW(buffer, L"%d", index);
AppendMenuW(parentMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenu, buffer);
return hSubMenu;
}
void AddMenus(HWND hwnd)
{
HMENU hMenubar = CreateMenu();
HMENU hMenu = CreateMenu();
HMENU hSubMenu = hMenu;
AppendMenuW(hMenu, MF_STRING, IDM_FILE_NEW, L"&New");
for (int index = 1; index <= 20; ++index)
{
hSubMenu = CreateSubmenu(hSubMenu, index);
}
AppendMenuW(hSubMenu, MF_STRING, IDM_IMPORT_MAIL, L"Import &mail");
AppendMenuW(hMenubar, MF_POPUP, (UINT_PTR)hMenu, L"&File");
SetMenu(hwnd, hMenubar);
}
Меню создано отлично. Но у меня проблема с выбором последнего элемента — он не подсвечен (когда мышь наведена) и недоступен для щелчка (всплывающее окно просто исчезает). Эта проблема не возникает, когда в меню меньше уровней подменю.
Есть ли известное ограничение для win32 api, или мне нужно сделать что-то еще, чтобы это работало?
Благодарю.
Задача ещё не решена.
Других решений пока нет …