MFC 菜单项显示可用 不可用状态

在画图程序中,右键单击弹出菜单,(复制,剪贴,粘贴)与文档生成的编辑菜单中的选项一致,其使用过程:

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);
}

你可能感兴趣的:(windows,null,文档,mfc,menu)