[英]How to create a context menu on listbox right click?
I have a window with a listbox which I would like to right click an entry in the list box and have certain options displayed in a context menu. 我有一个带有列表框的窗口,我想右键单击列表框中的条目,并在上下文菜单中显示某些选项。 I've looked online but it seems as if I can only get examples in MFC C++, or simply c#.
我看过网上但似乎我只能在MFC C ++中获得示例,或者只是c#。
Is this possible in standard Win32 c++? 这在标准的Win32 c ++中是否可行? I can handle a right click on the listbox via the WM_CONTEXTMENU message, but how can I make a menu appear?
我可以通过WM_CONTEXTMENU消息右键单击列表框,但是如何显示菜单呢?
I figured it out, thanks to Bhargav Bhat's comment about the related question. 我想通了,感谢Bhargav Bhat对相关问题的评论。
Handle right click on the listbox via checking for WM_CONTEXTMENU in your WndProc. 通过检查WndProc中的WM_CONTEXTMENU,右键单击列表框。
Grab the handle to the window via the wParam parameter, compare it to your listbox to see if the user right clicked the listbox. 通过wParam参数抓取窗口的句柄,将其与列表框进行比较,以查看用户是否右键单击了列表框。
From there, create the popupmenu via CreatePopupMenu(). 从那里,通过CreatePopupMenu()创建popupmenu。
Insert/Append into the menu via InsertMenu()/AppendMenu(). 通过InsertMenu()/ AppendMenu()插入/追加到菜单中。
Finally, call TrackPopupMenu(). 最后,调用TrackPopupMenu()。
case WM_CONTEXTMENU:
if ((HWND)wParam == m_hListBox) {
m_hMenu = CreatePopupMenu();
InsertMenu(m_hMenu, 0, MF_BYCOMMAND | MF_STRING | MF_ENABLED, 1, "Hello");
TrackPopupMenu(m_hMenu, TPM_TOPALIGN | TPM_LEFTALIGN, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, m_hWnd, NULL);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.