使用系统菜单作为上下文菜单

来源:互联网 发布:淘宝的福袋能买吗 编辑:程序博客网 时间:2024/05/02 04:55

      删除窗口的标题栏还有其它的问题,没有标题栏,用户就没有办法显示系统菜单,而使标题栏被还原。一种方法是响应WM_CONTEXTMENU消息,该消息用户在窗口上右击鼠标时产生。在任意位置弹出系统菜单说起来容易,做起来难,因为没有便于使用的API函数可以用来自动显示系统菜单。

      下面说明了一种可供使用的技术。当鼠标右键单击窗口客户区时,窗口类的OnContextMenu函数就用GetSystemMenu检索指向系统菜单的CMenu指针,并用CMenu::TrackPopupMenu()来显示菜单,如下:

 

 

使用这种方法存在一个问题:从菜单选择的命令会产生WM_COMMAND消息,而不是WM_SYSCOMMAND消息。做为补偿,函数TrackPopupMenu把TMP_RETURNCMD标志传递给该函数,指示它返回选中的菜单项ID。如果返回正的非0值,表明有菜单项被选中,程序将给自己发送一个WM_SYSCOMMAND消息,其中wParam等于菜单项的ID,如下:

 

if(nID>0)

      SendMessage(WM_SYSCOMMAND,nID,0);

因此就会调用OnSysCommand来处理从假系统菜单内选中的命令,就好像是从真的系统菜单中选中的那样。

 

       当TrackPopupMenu的返回值大于0,就说明用户从弹出菜单中选择了一个菜单。以返回的ID号为参数wParam的值,程序给自己发送了一个WM_SYSCOMMAND消息,

原创粉丝点击