代码改变世界

win32建立弹出式菜单

2011-09-28 20:17  捣乱小子  阅读(676)  评论(0编辑  收藏  举报

先秀一下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 ;