メニューを追加する・・・。
リソースを追加・・・。
Menu・・・。
新規・・・。
開く・・・。
上書き保存・・・。
名前を付けて保存・・・。
区切り線を入れて、
アプリケーションの終了・・・。
最後にIDR_MENU1をIDR_MAINMENUに変更・・・。
ファイルを追加・・・。
Menu.h・・・。
メニューハンドルm_hMenuとウィンドウハンドルm_hWndをもつCMenu・・・。
今回はコンストラクタでCApplicationオブジェクトを引数に取るのではなく、ウィンドウハンドルを引数に取る・・・。
そのため、SetMenuでウィンドウハンドルを指定する必要は無い・・・。
OnCommandMenuItemは純粋仮想関数なので、派生クラス任せ・・・。
Menu.cppは、
LoadMenuでGetWindowLongでhInstanceを取得し、::LoadMenu時に指定・・・。
m_hWndにウィンドウハンドルを保持しているので、SetMenuはそれを使えばいい・・・。
ファイルを追加・・・。
MainMenu.hは、
OnCommandMenuItemの内部を実装する・・・。
また、そこから分かれる独自ハンドラも・・・。
OnCommandMenuItemのLOWORD(wParam)に選択されたメニューアイテムのIDが渡されるので、それごとに独自ハンドラに振り分け・・・。
ハンドラの中はメッセージボックス出すだけ・・・。
CMainWindowでCMainMenuの各メソッドを呼び出すようにする・・・。
CMenuオブジェクトm_pMainMenuをもつ・・・。
また、ハンドラOnCommandを実装する・・・。
OnCreateで、CMainMenuオブジェクトをm_pMainMenuに格納したら、LoadMenu、SetMenuでメニューをセット・・・。
OnDestroyで、m_pMainMenuを解放・・・。
OnCommandでHIWORD(wParam)が0ならメニューなので、その時はm_pMainMenu->OnCommandMenuItemにメニューアイテム処理を任せる・・・。
ただ、そもそもWM_COMMANDを処理できる状態にないので、CWindowを修正・・・。
OnCommandは純粋仮想関数で追加・・・。
実装はさきほどのMainWindow.cppに・・・。
WM_COMMANDならOnCommandを呼ぶという部分を追加・・・。
これでOnCommandが呼ばれる・・・。
メニューアイテム"ファイル"を押すと、
各アイテムが出る・・・。
新規・・・。
開く・・・。
上書き保存・・・。
名前を付けて保存・・・。
アプリケーションの終了・・・。
あ、そだ・・・。
PrivateBuildの番号をFileDescriptionにも#で記載・・・。
こんな感じでビルド番号がわかる・・・。
https://github.com/bg1bgst333/ObjeqtNote/tree/develop/winapi/win32_blank/vs14/src/ObjeqtNote