メニューを追加する・・・。

リソースを追加・・・。

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