vs 2010+MFCでメニューオプションを動的に追加
5312 ワード
マイクロソフトがBCGを買ったので、現在のMFCダイナミック追加メニューオプションと以前のVC 6.0の上の違いは、
に表示されます.
テストのために単一ドキュメントエンジニアリングを新規作成しました.次は追加手順です.
0.Resource.hファイルにメニューオプションのIDを追加する:
1.CMainFrameの宣言ファイルに関数宣言を追加します.
2.CMainFrameクラスに関数実装を追加するには:
================================================================
追加したばかりのメニュー・サブアイテムのコマンド・メッセージに応答するには、次の手順に従います.
3.CMainFrame宣言に関数宣言を追加します.
4.CMainFrameインプリメンテーションにコマンドメッセージマッピングを追加するには:
ここでなぜON_COMMANDは?コマンドメッセージなので、windowsには3つのメッセージがあります.標準メッセージ、コマンドメッセージ、通知メッセージです.それらの処理は互いに異なっているので、自分でもっと多くの資料を調べてください.私はここであまり言いません.
5.CMainFrameインプリメンテーションに関数を追加するインプリメンテーション:
PS:もちろん、新規プロジェクトの場合は「Standard MFC」を選ぶことができ、従来のVC 6を使うことができます.0以前のMFCと同じセットになった~~~
ここではCMFCMenuBarというクラスを使いました
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CMFCMenuBarの継承関係:
CObject
CCmdTarget
CWnd
CBasePane
CPane
CMFCBaseToolBar
CMFCToolBar
CMFCMenuBar
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++