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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值