我们经常看到在界面上点击右键出现一个菜单,这个菜单就是上下文菜单,有些人也把它叫做“右键菜单”。
在win32中我们创建菜单只能创建顶部菜单,那么这种上下文菜单是如何实现的呢,其实就是拿这个顶部菜单的一部分,也就是这个顶部菜单的子菜单。
单我们点击鼠标右键的时候窗口会有产生两个消息分别是“WM_RBUTTONUP” 和 “WM_CONTEXTMENU”。在这里我们用WM_CONTEXTMENU,因为WM_CONTEXTMENU消息附带了以屏幕为准的鼠标的x,y坐标。
在WM_CONTEXTMENU中定义一个处理函数OnContentMenu,接收两个参数(HWND hwnd, LPARAM lParam)
VOID OnContentMenu(HWND hwnd, LPARAM lParam) {
HMENU MainhMenu = LoadMenu(g_hInstance, (char*)IDR_MENU1); //加载顶部菜单
HMENU hMenu = GetSubMenu(MainhMenu, 0);//获取顶部菜单的子菜单,0是索引。
//TrackPopupMenu是创建一个上下文菜单。可以参考msdn文档。
TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_TOPALIGN, LOWORD(lParam), HIWORD(lParam),0,hwnd,NULL);
}
这样就可以在鼠标点击的时候弹出菜单了。点击菜单项之后去 WM_COMMAND 消息处理。