メニューのオーナードロー

[戻る]
リムファクシ 2006/07/08(土) 09:05:25
メニューのオーナードローについて質問させて下さい。
SDI/基本クラスCFormViewでMFCアプリを作成し、
ViewクラスのOnInitialUpdate()にて

CMenu *pMenu = AfxGetMainWnd()->GetMenu();
CMenu *pSubMenu = pMenu->GetSubMenu(0);
pSubMenu->ModifyMenu(ID_FILE_NEW, MF_BYCOMMAND | MF_OWNERDRAW, NULL);

を記述しました。
そしていざ、WM_DRAWITEMを処理しようと思い、CMainFrameクラスのOnDrawItem()内で

switch (lpDrawItemStruct->itemID){
   case ID_FILE_NEW:     // 今回オーナードローに指定したリソースID
       (処理)
}
として処理を行いたいのですが、どうもここにはWM_DRAWITEMが飛んできていない様なの
です・・・

メニューエディタで作成したメニューのオーナードローについて
描画処理はどこで行えば良いのでしょうか・・・?

Blue 2006/07/08(土) 17:11:51
CMenuをサブクラス化して、CMenuのDrawItemで処理しなければならなそう。
http://www.athomejp.com/goldfish/mfc/window/ownermenu.asp

リムファクシ 2006/07/09(日) 00:16:44
うーむ・・・
ポップアップメニューならサブクラス化したメニューで呼び出せるのですが、
CFormViewやCViewでウィザードが生成するメニューのサブクラス化が、どうしても解り
ません・・・
CMenu* pMenu = AfxGetMainWnd()->GetMenu();
でメニューのハンドル取得して、それを基にサブクラス化させるのでしょうか?

Blue 2006/07/09(日) 01:47:58
やりたいことが少し微妙ですが、
http://www.vcppclub.com/samples/ctrl/p_menuex/menuex.html
のサンプルは参考になりますでしょうか?

リムファクシ 2006/07/09(日) 11:11:47
[[解決]]
Blueさん、ありがとうございます。
まさにやりたい事がこれなので、大変参考になりました。

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