先秀一下MSDN中学到的语句:if any,中文翻译:如果有的话(做做笔记啦)。
在新建了一个菜单资源之后,将菜单的属性设置Popup属性为true。
先要加载菜单资源LoadMenu,接下来要在鼠标右键按下消息上显示弹出式菜单了TrackPopupMenu。查看了MSDN这个函数之前还是要利用另一个函数来获得子菜单的,
hMenu
[in] Handle to the shortcut menu to be displayed. The handle can be obtained by calling CreatePopupMenu to create a new shortcut menu, or by calling GetSubMenu to retrieve a handle to a submenu associated with an existing menu item.
很明显要调用GetSubMenu来获得submenu(子菜单)。
另外在关于鼠标消息lParam参数设置的是窗口坐标,而不是屏幕坐标,但是在TrackPopupMenu中所用到的坐标是屏幕坐标,所以要作转换。
关键代码如下:
case WM_CREATE:
hMenu = LoadMenu (hInst, szAppName) ;
hMenu = GetSubMenu (hMenu, 0) ;(获取第一个菜单项)
return 0 ;
case WM_RBUTTONUP:
point.x = LOWORD (lParam) ;
point.y = HIWORD (lParam) ;
ClientToScreen (hwnd, &point) ;
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y,
0, hwnd, NULL) ;
return 0 ;