C++ c++;win32高效上下文菜单和子菜单

C++ c++;win32高效上下文菜单和子菜单,c++,winapi,menu,submenu,C++,Winapi,Menu,Submenu,当用户右键单击notifiyicon数据(托盘图标)时,我想在win32应用程序(c++)中添加右键单击上下文菜单/子菜单。我可以制作一个简单的一级菜单,但找不到多级菜单的示例 我想创建一个如下所示的菜单: Settings -> Setting 1 -> Setting 2 -> Setting 3 -> Settings 4 -> Setting 5

当用户右键单击notifiyicon数据(托盘图标)时,我想在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);
上面的代码放在notifyiconda消息处理程序(WM_RBUTTONUP)中

如何使用上述代码创建子菜单?我是否创建一个新的HMENU并将其插入父菜单

另一件让我困扰的事情是,菜单总是在右键点击事件被触发时创建的,所以每次它触发时都会创建一个新的菜单。是否可以在应用程序启动时创建菜单(带子菜单),并在应用程序关闭时销毁它?windows处理菜单的销毁吗


感谢回复。

子菜单只是另一个菜单项(来自CreatePopupMenu()),使用MF_弹出标志插入带有AppendMenu/InsertMenu的菜单项,或在掩码中插入带有MIIM_子菜单的InsertMenuItem

当应用程序启动时,没有任何东西可以阻止您创建菜单,但除非菜单中有大量项目或创建项目需要大量计算,否则我看不出响应托盘图标消息创建菜单有什么问题


你必须自己销毁一个Humenu(除非它连接到带有的HWND)

还要注意,DestroyMenu会销毁子菜单,所以你只需要在主菜单中调用它。你有如何将菜单1插入主菜单的示例吗?