vs 2010+MFCでメニューオプションを動的に追加

5312 ワード

マイクロソフトがBCGを買ったので、現在のMFCダイナミック追加メニューオプションと以前のVC 6.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」を選ぶことができ、従来のVC 6を使うことができます.0以前のMFCと同じセットになった~~~
ここではCMFCMenuBarというクラスを使いました
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CMFCMenuBarの継承関係:
CObject
     CCmdTarget
            CWnd
                    CBasePane
                           CPane
                                  CMFCBaseToolBar
                                          CMFCToolBar
                                                    CMFCMenuBar
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++