読者です 読者をやめる 読者になる 読者になる

ObjeqtNote #3 メニューの追加

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

f:id:BG1:20161027155028p:plain

リソースを追加・・・。

f:id:BG1:20161027155047p:plain

Menu・・・。

f:id:BG1:20161027155347p:plain

新規・・・。

f:id:BG1:20161027155426p:plain

開く・・・。

f:id:BG1:20161027155548p:plain

上書き保存・・・。

f:id:BG1:20161027155639p:plain

名前を付けて保存・・・。

f:id:BG1:20161027161044p:plain

区切り線を入れて、

f:id:BG1:20161027161122p:plain

アプリケーションの終了・・・。

f:id:BG1:20161027161157p:plain

最後にIDR_MENU1をIDR_MAINMENUに変更・・・。

f:id:BG1:20161027161321p:plain

ファイルを追加・・・。

f:id:BG1:20161027161353p:plain

Menu.h・・・。

メニューハンドルm_hMenuとウィンドウハンドルm_hWndをもつCMenu・・・。
今回はコンストラクタでCApplicationオブジェクトを引数に取るのではなく、ウィンドウハンドルを引数に取る・・・。
そのため、SetMenuでウィンドウハンドルを指定する必要は無い・・・。
OnCommandMenuItemは純粋仮想関数なので、派生クラス任せ・・・。

Menu.cppは、

LoadMenuでGetWindowLongでhInstanceを取得し、::LoadMenu時に指定・・・。
m_hWndにウィンドウハンドルを保持しているので、SetMenuはそれを使えばいい・・・。

f:id:BG1:20161027162314p:plain

ファイルを追加・・・。

f:id:BG1:20161027162427p:plain

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が呼ばれる・・・。

f:id:BG1:20161027171155p:plain

メニューアイテム"ファイル"を押すと、

f:id:BG1:20161027172004p:plain

各アイテムが出る・・・。

f:id:BG1:20161027171316p:plain

新規・・・。

f:id:BG1:20161027171332p:plain

開く・・・。

f:id:BG1:20161027171340p:plain

上書き保存・・・。

f:id:BG1:20161027171350p:plain

名前を付けて保存・・・。

f:id:BG1:20161027171404p:plain

アプリケーションの終了・・・。

あ、そだ・・・。

PrivateBuildの番号をFileDescriptionにも#で記載・・・。

f:id:BG1:20161027171638p:plain

こんな感じでビルド番号がわかる・・・。

https://github.com/bg1bgst333/ObjeqtNote/tree/develop/winapi/win32_blank/vs14/src/ObjeqtNote