ダイアログのクラス化(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

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

https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/WinMain.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Application.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Application.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MainApplication.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MainApplication.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Window.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Window.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MainWindow.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MainWindow.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MenuWindow.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MenuWindow.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Menu.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Menu.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MainMenu.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/MainMenu.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Dialog.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/Dialog.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/AboutDialog.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/AboutDialog.cpp
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/resource.h
https://github.com/bg1bgst333/Test/blob/master/dialog/class_dialog/winapi/src/CDialog/CDialog/CDialog.rc