在vs2010+MFC中动态添加菜单选项

因为微软买了BCG那些东西,所以现在的MFC动态添加菜单选项和以前VC6.0上的不一样,需要在

BOOL CMainFrame::OnShowPopupMenu(CMFCPopupMenu *pMenuPopup)

中处理。

 

我新建了一个单文档工程来测试,下面是添加步骤:

0.在Resource.h文件中添加菜单选项的ID:

#define IDS_EDIT_MYITEM             1002

 

1.在CMainFrame的声明文件中添加函数声明:

BOOL OnShowPopupMenu(CMFCPopupMenu* pMenuPopup);

 

2.在CMainFrame类中添加函数实现:

  
  
  1. // CFrameWndEx::OnShowPopupMenu 的解释:Called by the framework when it displays a pop-up menu.
  2. BOOL CMainFrame::OnShowPopupMenu(CMFCPopupMenu *pMenuPopup)
  3. {
  4. // 在“Edit”菜单最下面添加了一个分割线和一个"MyItem"子项
  5. int iIndex = -1;
  6. // 使用CommandToIndex()来获得菜单项的索引,然后根据索引来确定子菜单项的添加位置
  7. if (!CMFCToolBar::IsCustomizeMode() && (iIndex = pMenuPopup->GetMenuBar()->CommandToIndex(ID_EDIT_PASTE)) >= 0)
  8. {
  9. pMenuPopup->InsertSeparator(iIndex + 1);
  10. pMenuPopup->InsertItem(CMFCToolBarMenuButton(IDS_EDIT_MYITEM, NULL, -1, L"&MyItem "), iIndex + 2);
  11. }
  12. return CFrameWndEx::OnShowPopupMenu(pMenuPopup);
  13. }

 

================================================================


为了响应刚刚添加的那个菜单子项的命令消息,需要这样做:

3.在CMainFrame声明中添加函数声明

afx_msg void OnEditMyItem();

 

4.在CMainFrame实现中添加命令消息映射

ON_COMMAND(IDS_EDIT_MYITEM, &CMainFrame::OnEditMyItem)

这里为什么用ON_COMMAND呢?因为它是一种命令消息,windows有3种消息:标准消息、命令消息、通告消息。它们的处理彼此有异,请自行查阅更多资料,我在这里不多说了。

 

5.在CMainFrame实现中添加函数的实现

void CMainFrame::OnEditMyItem()
{
    MessageBox(L"You cilcked EditMyItem");
}


PS:当然,新建项目的时候可以选择“Standard MFC”,那样就可以用以前VC6.0和以前MFC那一套东西了~~~


在这里我们用到了一个类:CMFCMenuBar

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

CMFCMenuBar的继承关系:

CObject

    CCmdTarget

           CWnd

                   CBasePane

                          CPane

                                 CMFCBaseToolBar

                                         CMFCToolBar

                                                   CMFCMenuBar

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值