在画图程序中,右键单击弹出菜单,(复制,剪贴,粘贴)与文档生成的编辑菜单中的选项一致,其使用过程:
1,首先右击弹出弹出式菜单
1)重载OnRButtonDown方法,自己也是这么实现的,但是今天发现了有人用另一种方法 ,如2所介绍的
2)重载OnContextMenu方法,
OnContextMenu和 OnRButtonDown区别:
当鼠标压下,鼠标弹起两个消息一次发生时,才会发生OnContextMenu消息。
OnRButtonDown就是鼠标右键消息.,但 "ContextMenu "不一定是鼠标右键触发的. 比如按windows键盘上的属性键,或按shift+F10都是ContextMenu. 所以, 不要使用 OnRButtonDown取代OnContextMenu。
在两个函数中弹出弹出式菜单的程序是一致的:
CMenu menu;
VERIFY(menu.LoadMenu(IDR_CONTEXT_MENU));//载入快捷菜单资源
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);
这里遇到的问题是: 按自己的想法,设置的弹出式菜单和编辑菜单的ID是一致的,动作也是一致的,那么对两者进行操作应该是相同的,但是这里并没有出现一致性,然后看别人的代码,发现在 弹出弹出式菜单时,如下写法则可以:
CMenu menu;
VERIFY(menu.LoadMenu(IDR_CONTEXT_MENU));//载入快捷菜单资源
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this;//设置快捷菜单的主窗口
while (pWndPopupOwner->GetStyle() & WS_CHILD)
pWndPopupOwner = pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
pWndPopupOwner);
2,设置菜单项的可用 不可用
添加事件:
void CDrawProgramView::OnUpdateEditCopy(CCmdUI *pCmdUI)
{
//如果选中
if(GetDocument()->m_selectCout != 0 )
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}