zoukankan      html  css  js  c++  java
  • 在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
    13 return CFrameWndEx::OnShowPopupMenu(pMenuPopup);
    14 }

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


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

    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

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

     

  • 相关阅读:
    Announcement follows closure of QEDIT’s investment round with USD 10 million secured from investors
    Zero-Knowledge taxation on Ethereum
    盘点那些年被甲骨文前CEO埃里森炮轰过的厂商
    怎样才能用手机控制电脑呢?
    怎样才能用手机控制电脑呢?
    怎样才能用手机控制电脑呢?
    怎样才能用手机控制电脑呢?
    关于我写博客的那些事
    关于我写博客的那些事
    关于我写博客的那些事
  • 原文地址:https://www.cnblogs.com/lingshaohu/p/2225812.html
Copyright © 2011-2022 走看看