ダイアログのクラス化(WindowsAPI)

ダイアログをクラス化する・・・。

ウィンドウクラスと統一してもいいが、動作が若干違うので個別にダイアログクラスを作る・・・。

f:id:BG1:20160530103103p:plain

と、

f:id:BG1:20160530103149p:plain

というように前回同様のメニューを用意・・・。

ダイアログも、

f:id:BG1:20160530103251p:plain

前回同様・・・。

基底クラスとなるCDialogクラスは、

m_mapDialogMapでダイアログ管理・・・。
m_pWindowは呼び出し元ウィンドウ・・・。
m_nIDTemplateはダイアログリソースID・・・。
StaticDialogProcからDynamicDialogProcを呼ぶあたり、CWindowクラスと同じ構造・・・。
OnInitDialogとOnCloseは最低限の動作を実装し、OnCommandは派生クラスでオーバーライドさせる・・・。
OnDestroyもm_mapDialogMapから不要なダイアログを消す作業があるので必要・・・。

ダイアログの表示はDoModalで、

中でDialogBoxParamを呼んでいる・・・。

第5引数にthisを渡すことで、

WM_INITDIALOGのハンドルとオブジェクトの紐付けに利用している・・・。

WM_INITDIALOG以外の時は、

マップからオブジェクトを拾って、そのオブジェクトのDynamicDialogProcを呼ぶ・・・。

DynamicDialogProcは、

各ハンドラの呼び出し・・・。

OnInitDialogはとりあえずTRUEを返すだけでいい・・・。
OnCloseは、EndDialogでダイアログを閉じる・・・。
OnDestroy時に、m_mapDialogMapから自身のオブジェクトを削除・・・。

CDialogの派生、今回表示するCAboutDialogは、

OnCommandの実装のみ・・・。IDOKの時、EndDialogでダイアログを閉じる・・・。

あとは、CMainMenuで、

CAboutDialogにリソースID、IDD_ABOUT_DIALOGなど必要なものを渡して、DoModalで表示・・・。

f:id:BG1:20160530111102p:plain

前回同様、ダイアログを表示できた・・・。

Test/WinMain.cpp at master · bg1bgst333/Test · GitHub
Test/Application.h at master · bg1bgst333/Test · GitHub
Test/Application.cpp at master · bg1bgst333/Test · GitHub
Test/MainApplication.h at master · bg1bgst333/Test · GitHub
Test/MainApplication.cpp at master · bg1bgst333/Test · GitHub
Test/Window.h at master · bg1bgst333/Test · GitHub
Test/Window.cpp at master · bg1bgst333/Test · GitHub
Test/MainWindow.h at master · bg1bgst333/Test · GitHub
Test/MainWindow.cpp at master · bg1bgst333/Test · GitHub
Test/MenuWindow.h at master · bg1bgst333/Test · GitHub
Test/MenuWindow.cpp at master · bg1bgst333/Test · GitHub
Test/Menu.h at master · bg1bgst333/Test · GitHub
Test/Menu.cpp at master · bg1bgst333/Test · GitHub
Test/MainMenu.h at master · bg1bgst333/Test · GitHub
Test/MainMenu.cpp at master · bg1bgst333/Test · GitHub
Test/Dialog.h at master · bg1bgst333/Test · GitHub
Test/Dialog.cpp at master · bg1bgst333/Test · GitHub
Test/AboutDialog.h at master · bg1bgst333/Test · GitHub
Test/AboutDialog.cpp at master · bg1bgst333/Test · GitHub
Test/resource.h at master · bg1bgst333/Test · GitHub
Test/CDialog.rc at master · bg1bgst333/Test · GitHub