メニューのクラス化(WindowsAPI)

今度はメニューをクラス化してみる・・・。

f:id:BG1:20160518134714p:plain

メニューリソースを追加したら、

f:id:BG1:20160518134750p:plain

ここまで項目を決めて、IDなども変える・・・。

Menu.hのCMenuは、

こんな感じ・・・。
m_hWndはメニューを持つウィンドウのハンドル・・・。
ここでもm_pAppをこれに渡して、ここから使えるように・・・。
OnCommandMenuItemは、このクラス独自のハンドラだが純粋仮想関数にしてるので、派生クラスのCMainMenuクラスでオーバーライド・・・。

LoadMenuやSetMenuはAPI呼び出してるだけ・・・。

MainMenu.hのCMainMenuは、

ここでOnCommandMenuItemと、各メニューアイテムごとのハンドラを定義・・・。

LOWORD(wParam)をswitch-case文で各IDに振り分け、各ハンドラに・・・。

各ハンドラはメッセージボックスでメンバ関数名表示してるだけ・・・。

さて、このCMainMenuの作成と呼び出しだが、

CMainWindowにメンバとして持たせる・・・。

また、OnCommandの実装も忘れずに・・・。

OnCreateでのCMainMenu作成・・・。

そしてOnCommand・・・。

破棄も忘れずに・・・。

HIWORD(wParam)が0の時はメニューなので、m_pMainMenu->OnCommandMenuItemに任せる・・・。
これでCMainMenuにハンドラ処理を寄せられる・・・。

あとは先ほどのメニューアイテムごとのハンドラで処理がなされる・・・。

実行すると、

f:id:BG1:20160518141526p:plain

"ファイル"を押して、

f:id:BG1:20160518141552p:plain

"新規"を押すと、

f:id:BG1:20160518141657p:plain

"OnFileNew"・・・。

f:id:BG1:20160518141734p:plain

"アプリケーションの終了"なら、

f:id:BG1:20160518141750p:plain

"OnAppExit"となる・・・。

https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/WinMain.cpp
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/Application.h
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/Application.cpp
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/MainApplication.h
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/MainApplication.cpp
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/Window.h
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/Window.cpp
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/MainWindow.h
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/MainWindow.cpp
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/Menu.h
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/Menu.cpp
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/MainMenu.h
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/MainMenu.cpp
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/resource.h
https://github.com/bg1bgst333/Test/blob/master/menu/class_menu/winapi/src/CMenu/CMenu/CMenu.rc