スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/-- | スポンサー広告  TOP

MFC SDIの起動時の初期化順番

今回はプログラムを組んでいると気になることがある起動時の初期化順番を解説します。
MFCのSDI限定ですが、MDIもさほど変わらないはずです。
ドキュメントビューアーキテクチャの流れとしても理解の手助けとなれば幸いです。

まず、呼び出される順番ですが、次の様になります。
①CxxxApp::CxxxApp()
②CxxxApp::InitInstance() start
③CxxxDoc::CxxxDoc()
④CMainFrame::CMainFrame()
⑤CMainFrame::PreCreateWindow()
⑥CMainFrame::OnCreate() start
⑦CxxxView::CxxxView()
⑧CxxxView::PreCreateWindow()
⑨CMainFrame::OnCreate() end
⑩CxxxDoc::OnNewDocument()
⑪CxxxView::OnInitialUpdate()
⑫CxxxApp::InitInstance() end

解説すると、
①CxxxAppのコンストラクタ
②CxxxAppの初期化処理を開始
③ドキュメントのコンストラクタ
④CMainFrameのコンストラクタ
⑤CMainFrameのウィンド生成前の処理
⑥CMainFrameのウィンド生成処理を開始
⑦ビューのコンストラクタ
⑧ビューのウィンド生成前の処理
⑨CMainFrameのウィンド生成処理を終了
⑩ドキュメントの新規作成処理
⑪ビューの新規作成処理
⑫CxxxAppの初期化処理を終了
以上です。

⑩と⑪に関してはドキュメントの新規作成を行う度に呼び出されるので、普通の初期化処理を書いてはいけません。
で、ビューのウィンド生成時に1回だけ行いたい処理(ウィンドのサイズ変更など)がある場合は、OnInitialUpdate中にフラグで1回しか通らない制御をして強引に初期化処理を書くのが一番簡単です。それより良い方法も有るかも知れませんが、私は手抜きでこれで処理しています。

疑問、質問、反論があればコメントお願いします。
でわまた。

2008/05/23 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

コメント

コメントの投稿



管理者にだけ表示を許可する

 | BLOG TOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。