CWnd::OnCreateは、ウィンドウが作成された時(WM_CREATEが来た時)の処理を記述するためのメンバ関数・・・。
このようなウィンドウメッセージに対する処理を書くメンバ関数をメッセージハンドラという・・・。
CWndのメンバ関数ではあるが、当然派生クラスのCFrameWndでも使える・・・。
引数には、CreateStruct構造体のポインタが渡される・・・。
今回はWindowsAPIのWM_CREATEでやったCreateStruct構造体の一部を表示するプログラムのMFC版を作る・・・。
CFrameWnd_.hでは、
コンストラクタCFrameWnd_()、メンバ関数OnCreate、そしてDECLARE_MESSAGE_MAP()なるマクロが置かれている・・・。
このマクロがないと、メッセージハンドラが実行されないので、必須である・・・。
(メンバではないので';'を付けないように・・・。)
CFrameWnd_.cppでは、
BEGIN_MESSAGE_MAP()に、メッセージの転送先である派生クラスCFrameWnd_、転送元の基底クラスCFrameWndを指定し、さらに次の行で、ON_WM_CREATE()を指定することで、WM_CREATEのメッセージがCFrameWndからCFrameWnd_に転送され、CFrameWnd_のOnCreateが実行される・・・。
でEND_MESSAGE_MAPでとじると・・・。
他のメッセージも転送したい時は、"ON_WM_XXX"という感じで指定していく・・・。
コンストラクタでは今回はなにもしない・・・。
Createは、CWinApp_::InitInstanceで呼ぶからである・・・。
でOnCreateでは、
ウィンドウハンドルや、ウィンドウ名、座標などをCStringで連結してAfxMessageBoxで表示・・・。
CWinApp_.cppでは、InitInstanceで、
CFrameWnd_オブジェクト生成、Create、ShowWindow、UpdateWindow、と連続で呼んでウィンドウを表示している・・・。
(ここでは全部pFrameWnd_から呼んでいる・・・。)
実行すると、
CreateStruct構造体の一部などが表示・・・。
そのあと、
ウィンドウが表示される・・・。
Sample/CWinApp_.h at master · bg1bgst333/Sample · GitHub
Sample/CWinApp_.cpp at master · bg1bgst333/Sample · GitHub
Sample/CFrameWnd_.h at master · bg1bgst333/Sample · GitHub
Sample/CFrameWnd_.cpp at master · bg1bgst333/Sample · GitHub