リソースエディタでメニュー(ファイル)に 最近使ったファイル をポップアップで作成して、
サブメニューに ID_FILE_MRU_FILE1 を追加しました.
VC++のような感じにしたいのですが、上記方法では出来ませんでした。
最近使ったファイルの項目の上にできてしまいます。
CWinAppの関数を使わないで、CRecentFileList を自分で管理するしかないのでしょうか?
よろしくお願いします。
WIN2000 SP2
VC6.0 SP5
MFC使用
テクニカルノート21の「ポップアップメニューのネスト」によると、
ポップアップメニューがある場合、
まずポップアップメニュー自体のON_UPDATE_COMMAND_UIが発生する。
このとき、サブメニューの先頭IDに対応する更新ハンドラが呼ばれる(なんだそりゃ!)。
次に、サブメニューの各々について更新ハンドラを呼び出すので、
再度サブメニューの先頭IDに対応する更新ハンドラが呼ばれる。
この2つは、CCmdUI::m_pSubMenuがNULLかどうかで区別しろ。
だそうです。
MFCのMRU関連の処理を見ても、これに対応する処理はありません。
#不自然な仕様はバグのもと(^^;
解決方法としては、
C*AppクラスにID_FILE_MRU_FILE1のハンドラを追加して
次のようにします。
void C*App::OnUpdateFileMruFile1(CCmdUI* pCmdUI)
{
if (pCmdUI->m_pSubMenu == NULL)
CWinApp::OnUpdateRecentFileMenu(pCmdUI);
else
// ポップアップメニュー自体の更新があればここに...
}
