快捷菜单,说得容易理解一点,就是右键菜单,当我们在某个区域内单击鼠标右键,会弹出一些菜 单项。这种类型的菜单,是随处可见的,我们在桌面上右击一下,也会弹出一个菜单。
右键菜 单的好处就是方便,它经常和我们正在操作的某个UI元素联系起来,比如我们正在使用文本框输入文本 ,我们在文本框中右击,就会看到可能有【复制】【清空】【全选】之类的选项,所以,右键菜单也称 为“上下文菜单(Context Menu)”。
一般来说,创建并使用快捷菜单,可以按照以下步骤进 行:
1、用资源编辑器创建菜单。
2、当我们在窗口上按下鼠标右键,当系统处理 WM_RBUTTONUP时会向我们的应用程序发送一条WM_CONTEXTMENU消息,我们通过响应这条消息来决定是否 弹出菜单。
3、计算菜单弹出的位置,一般在我们鼠标指针的右下方,该坐标是基于屏幕的,不 是窗口的。
4、调用TrackPopupMenu函数显示快捷菜单。
5、因为这种菜单是不属于某个 窗口的,它的内存资源不会在窗口销毁时被回收,因此,在TrackPopupMenu返回后要调用DestroyMenu 来销毁菜单的资源,释放内存。
好的,基本思路有了,我们就按照这个思路来试一试,看能不 能实现一个右键菜单。
首先,用资源编辑器建立一个菜单,因为我们的弹出菜单一般只显示一 系列菜项,是没有菜单的头部,不像菜单栏。因此,我们把菜单做成这样:
开发入门(6):创建右键菜单-">
快捷菜单只会显示我用画笔圈起来的那部分,而上面的【abc】是不显示的,所以你可以让它 空着,也可以随便输入一些内容。
然后为每个菜单项设置ID就行了,资源编辑器有时候会产生 一堆没有被使用的ID宏,这些我们可以手动删除,当然也可以不管它,反正不影响程序的编译,因为头 文件是不参与编译的。我们编译的时候只是编译.cpp文件。
接下来就是捕捉WM_CONTEXTMENU消 息。显示菜单。
case WM_CONTEXTMENU: { //加载菜单资源 HMENU hroot = LoadMenu((HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_CONTEXT)); if(hroot) { // 获取第一个弹出菜单 HMENU hpop = GetSubMenu(hroot,0); // 获取鼠标右击是的坐标 int px = GET_X_LPARAM(lParam); int py = GET_Y_LPARAM(lParam); //显示快捷菜单 TrackPopupMenu(hpop, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, px, py, 0, (HWND)wParam, NULL); // 用完后要销毁菜单资源 DestroyMenu(hroot); } } break;
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索鼠标
, 编译
, 编辑器
, 菜单
, 窗口
资源
,以便于您获取更多的相关知识。