最近使ったファイルをサブメニューにしたい

[戻る]
ナオーバ 2002/09/04(水) 16:22:14
リソースエディタでメニュー(ファイル)に 最近使ったファイル をポップアップで作成して、
サブメニューに ID_FILE_MRU_FILE1 を追加しました.

VC++のような感じにしたいのですが、上記方法では出来ませんでした。
最近使ったファイルの項目の上にできてしまいます。

CWinAppの関数を使わないで、CRecentFileList を自分で管理するしかないのでしょうか?

よろしくお願いします。

WIN2000 SP2
VC6.0   SP5
MFC使用

dairygoods 2002/09/05(木) 19:53:53
テクニカルノート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
     // ポップアップメニュー自体の更新があればここに...
}

古いスレッドには追加発言できません。