今度はメニューをクラス化してみる・・・。
メニューリソースを追加したら、
ここまで項目を決めて、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にハンドラ処理を寄せられる・・・。
あとは先ほどのメニューアイテムごとのハンドラで処理がなされる・・・。
実行すると、
"ファイル"を押して、
"新規"を押すと、
"OnFileNew"・・・。
"アプリケーションの終了"なら、
"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