本文是读者在学习孙鑫的《VC++深入详解》时,对一些在VS2012与VC6.0不同地方,需要修改的代码进行整理得到的。
在VC++6.0中,在project
添加方法如下:
1、
在资源视图中添加所需的右键菜单
2、选择相应的类,单文档时选中View类在属性中添加WM_CONTEXTMENU消息
3、
在OnContextMenu添加如下代码
void CMainFrame::OnContextMenu(CWnd*, CPoint point) { if (point.x == -1 && point.y == -1) //判断是否在窗口外面 { CRect rect; GetClientRect(rect); //得到窗口客户区的大小 ClientToScreen(rect); //转化为屏幕坐标 point = rect.TopLeft();//获取左上角坐标 point.Offset(5, 5); //坐标偏移5,5 } //上面主要是个定位问题,也就是求出弹出菜单的显示位置 //可以自己改 CMenu menu;//声明菜单对象 VERIFY(menu.LoadMenu(CG_IDR_POPUP_MAIN_FRAME));//判断加载菜单资源是否成功 CMenu* pPopup = menu.GetSubMenu(0); //获得第一个弹出菜单的指针,也就是菜单中的第一个弹出菜单 ASSERT(pPopup != NULL); //p断言不为空 CWnd* pWndPopupOwner = this;//当前类的指针 //下面遍历主要是为找到第一个不含有WS_CHILD的窗口指针 while (pWndPopupOwner->GetStyle() & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent(); //下面就是弹出菜单 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner); }