読者です 読者をやめる 読者になる 読者になる

CWinApp::Run

CWinApp::Runは、メッセージループ処理を行うメンバ関数・・・。

CWinApp::Run

これに任せれば、メッセージループは勝手にやってくれる・・・。
そのため、これを普段オーバーライドすることはないが、今回は、派生クラスCWinApp_のInitInstanceでフレームウィンドウを作成し表示、CWinApp_のRunで親クラスCWinAppのRunを呼んでメッセーループにしばらく入る・・・。
ウィンドウを閉じると、CWinAppのRunから抜けるのでそのあとAfxMessageBoxで"Exit Run!"と表示する流れ・・・。
つまり、閉じるまでウィンドウを表示するということ・・・。

InitInstanceとRunをオーバーライド・・・。

InitInstanceでは、

今回は派生クラスとかではなく、MFCのCFrameWndを生成、m_pMainWndに入れる前にCFrameWndのオブジェクトポインタpFrameWndにも入れておく・・・。
こうすることで、引数の省略可能なCFrameWndのCreateも使えて便利・・・。

そのCreateでウィンドウ作成・・・。ウィンドウクラス名はNULLで既定のウィンドウクラスに、あとはウィンドウ名を指定するだけ・・・。
親クラスのCWndだと全部書かないといけないので、それに比べると楽・・・。

ShowWindowでm_nCmdShowに沿って表示・・・。
UpdateWindowは更新だが、今回は無くてもいいかな・・・。

成功なのでTRUEを返す・・・。

そして、Runが呼ばれる・・・。

CWinAppのRunに入ると、既定のメッセージループに入るので、ウィンドウを閉じるまでは抜けない・・・。

閉じると、メッセージループから抜けて、メッセージボックスによって"Exit Run!"が表示される・・・。

実行すると、

f:id:BG1:20150419153650p:plain

ウィンドウが表示される・・・。
この時点でCWinAppのRunの中のメッセージループに入っている・・・。

閉じると、

f:id:BG1:20150419153751p:plain

そのループから抜けて、"Exit Run!"と表示された・・・。

確かにRunはメッセージループだ・・・。

Sample/CWinApp_.h at master · bg1bgst333/Sample · GitHub
Sample/CWinApp_.cpp at master · bg1bgst333/Sample · GitHub