void CMainFrame::OnUpdateSettingsDrawenable(CCmdUI *pCmdUI) {
// TODO: Add your command update UI handler code here // 根据m_bDraw的值设置是否选中 pCmdUI->SetCheck(m_bDraw); }
5. 运行程序,效果图如下:
6. 接下来我们要重新实现右键菜单。大家以后可以仿照VS2010自动生成的代码实现右键菜单,也可以用鸡啄米下面讲到的方法。首先将
CExample34View::OnRButtonUp(UINT /* nFlags */, CPoint point)函数内的代码都注释掉,保证原来的弹出方法失效。
7. 自动生成代码是在鼠标弹起时实现的右键菜单,我们这里改为在鼠标按下时就弹出右键菜单。在class view类视图中点击CExample34View,然后在属性页的messages列表中找到WM_RBUTTONDOWN,添加其消息响应函数
CExample34View::OnRButtonDown(UINT nFlags,CPoint point),修改其实现为:
C++代码
void CExample34View::OnRButtonDown(UINT nFlags, CPoint point) {
// TODO: Add your message handler code here and/or call default CMenu menu; // 菜单(包含主菜单栏和子菜单) CMenu *pSubMenu; // 右键菜单
// 加载菜单资源到menu对象
menu.LoadMenu(IDR_POPUP_EDIT);
// 因为右键菜单是弹出式菜单,不包含主菜单栏,所以取子菜单 pSubMenu = menu.GetSubMenu(0); // 将坐标值由客户坐标转换为屏幕坐标 ClientToScreen(&point);
// 弹出右键菜单,菜单左侧与point.x坐标值对齐
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
CView::OnRButtonDown(nFlags, point); }
8. 最终的右键菜单效果:
本节内容不少,大家可以慢慢消化。菜单的讲解就到这里了。