CFrameWnd::LoadFrameで、リソースからフレームをロードして、フレームウィンドウを作成できた・・・。
しかし、
- ウィンドウのタイトルが表示されない
- メニューが有効になっていない
という2つの問題が発生したので、これを解決していこう・・・。
まず、ウィンドウのタイトルが表示されない問題だが、これはLoadFrameでロードするフレームの中には、MENU、ICON、ACCELERATORSの他に、STRINGTABLEも含まれることから発生する・・・。
STRINGTABLEで、
このように、ロードするリソースID"IDR_MAINFRAME"とタイトルにしたい文字列"ON_UPDATE_COMMAND_UI"のペアをSTRINGTABLEで登録すると、ウィンドウのタイトルは"ON_UPDATE_COMMAND_UI"となる・・・。
次に、メニューの有効化(これが本題)だが、メニュー表示前などに呼ばれるUI更新メッセージに対するハンドラを設定し、そこに有効化の処理を書かなければいけない・・・。
このON_UPDATE_COMMAND_UIマクロを使って、UI更新ハンドラをセットする・・・。
CFrameWnd_.hで、
UI更新はメニュー項目ごとに行われるので、項目1つごとにハンドラを定義する・・・。これはItem1-1のハンドラ・・・。
CFrameWnd_.cppでは、
渡されるpCmdUIオブジェクトポインタがNULLでなければ、Enableメンバ関数を呼ぶ・・・。
これでメニュー項目Item1-1は有効になる・・・。
あとは、このハンドラを、
ON_UPDATE_COMMAND_UIマクロにセットする・・・。
あ、そうだ・・・。
これプロジェクト名に"UPDATE"と含まれてるので、マニフェストファイル(app.manifest)を忘れずに・・・。
(githubにaddし忘れた・・・。詳しくはDispatchMessage - 車輪のx発明 ~B.G's Blog~)
実行すると、
タイトル"ON_UPDATE_COMMAND_UI"も出ているし、メニュー項目もItem1-1だけだが有効になっている・・・。
Sample/CWinApp_.h at master · bg1bgst333/Sample · GitHub
Sample/CWinApp_.cpp at master · bg1bgst333/Sample · GitHub
Sample/CFrameWnd_.h at master · bg1bgst333/Sample · GitHub
Sample/CFrameWnd_.cpp at master · bg1bgst333/Sample · GitHub
Sample/resource.h at master · bg1bgst333/Sample · GitHub
Sample/ON_UPDATE_COMMAND_UI.rc at master · bg1bgst333/Sample · GitHub