MFCのリボンのカテゴリイベントの追加方法

MFCのリボンでカテゴリを変えた際のイベントを取得したい場合があるかと思います。単純にリボンからイベントを生成できたらいいのですが、残念ながらできません。ここでは、カテゴリ切り替えの際に、イベントを発生させる方法を紹介します。

MainFrm.hにカテゴリ変更時のメソッドを宣言する

まず、MainFrm.hに以下のメソッドを記述します。これはカテゴリ変更時に呼び出されるイベントです。「生成されたメッセージの割り当て関数」のprotected:以下にいれておきましょう。

LPARAM CMainFrame::OnRibbonCategoryChanged(WPARAM wp, LPARAM lp);

MainFrm.cppにイベントメソッドを記述する

次にOnRibbonCategoryChangedの中身を記述します。その前に、MainFrm.cppの「BEGIN_MESSAGE_MAP」のところに以下のコードを記述して、カテゴリイベントを取得できるようにします。

ON_REGISTERED_MESSAGE(AFX_WM_ON_CHANGE_RIBBON_CATEGORY, OnRibbonCategoryChanged)

次にOnRibbonCategoryChangedの中身を以下のように記述します。

LPARAM CMainFrame::OnRibbonCategoryChanged(WPARAM wp, LPARAM lp)
{
	CMFCRibbonCategory *pCategory = m_wndRibbonBar.GetActiveCategory();
	int nCategory = m_wndRibbonBar.GetCategoryIndex(pCategory);
	//... 以下に命令をかく
	return 0;
}

ここで、nCategoryがどのカテゴリを選んだかの番号となります。if文で命令を分岐させるといいでしょう。

参考記事:Notification for Ribbon Category Selection change and Command Routing

著者:安井 真人(やすい まさと)