C++ Win32高效上下文菜单和子菜单

5
我希望为我的Win32应用程序(C ++)添加右键上下文菜单/子菜单,当用户右键单击通知区域数据(托盘图标)时。我可以创建一个简单的一级菜单,但找不到多级菜单的示例。
我想创建一个类似于以下内容的菜单:
Settings ->  Setting 1  -> Setting 2
                        -> Setting 3
         ->  Settings 4 -> Setting 5
                        -> Setting 6    
Exit 

我将使用以下代码创建菜单:

 HMENU hPopupMenu = CreatePopupMenu();
 InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, IDM_EXIT, L"Exit");
 SetForegroundWindow(hWnd);
 TrackPopupMenu(hPopupMenu, TPM_BOTTOMALIGN | TPM_RIGHTALIGN, p.x, p.y, 0, hWnd, NULL);

以上代码放置在notifyicondata消息处理器(WM_RBUTTONUP)中。

如何使用上述代码创建子菜单?我需要创建一个新的HMENU并将其插入到父菜单中吗?

另一件困扰我的事情是,菜单总是在右键单击事件触发时创建,因此每次它触发时都会创建一个新的HMENU。是否可以在应用程序启动时创建菜单(包括子菜单),并在应用程序关闭时销毁它?Windows是否负责销毁菜单?

谢谢回复。

1个回答

4
一个子菜单只是另一个HMENU(从CreatePopupMenu())作为菜单项插入,使用AppendMenu/InsertMenu并使用MF_POPUP标志或使用MIIM_SUBMENU在掩码中的InsertMenuItem插入。

除非菜单有大量项目或创建项目需要大量计算,否则没有阻止您在应用程序启动时创建菜单。我认为在响应托盘图标消息时创建它们没有问题。

您必须自己销毁HMENU(除非它附加到带有SetMenu()的HWND)。


3
请注意,DestroyMenu会销毁子菜单,因此您只需为主菜单调用它即可。 - pezcode
你有一个将菜单1插入主菜单的示例吗? - blejzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接