MFCプログラミング01 概要

̃Gg[͂ĂȃubN}[Nɒlj

MFCプログラミングシリーズ
初回は、MFCの概要と、画面表示について。

構成

アプリケーションクラス
├ドキュメントクラス
├ビュークラス
└フレームウィンドウクラス

ドキュメントクラスが、データを読み込む。
読み込んだデータをビュークラスが画像として表示する(文字列も画像として表示される)
このときフレームウィンドウも表示するので、ユーザはウィンドウとして見える。

小規模なプログラムではドキュメントクラス使わないことも。

処理の流れ

◆起動
WinMain()が起動される。
MFCのライブラリの中にある。
◆初期化
ウィンドウクラスの登録や、
CWinAppクラスのInitInstace()関数によるインスタンスの初期化。
(アプリケーションクラスに記述されている。手を入れることでウィンドウスタイルの変更ができる。)
◆メッセージループ処理
CWinAppクラスのRun()関数による
◆終了処理
CWinAppくらすのExitInstance()関数が呼ばれる(終了指示があった場合、Run()関数によって。)。

画面の描画

UpdateWindow()関数や、RedrawWindow()関数が呼ばれる

WM_PAINTメッセージが送られる。

OnPaint()関数が呼ばれ、ウィンドウを再描画し、
CViewクラスを用いるドキュメント/ビューアプリケーションならば、
OnDraw()関数を呼ぶ。
(OnDraw()関数はドキュメントクラスの持つデータの描画に使用する)

※WM_PAINTメッセージが発行されるタイミング
・起動時
・画面が隠れて再び現れた時
・Invalidate関数(クライアント領域の再描画)、 InvalidateRect関数(指定した矩形領域の再描画)が呼ばれた時
OnPaint/OnDrawが呼ばれるタイミングはWindows任せになる。
以下のように呼んだ直後にUpdateWindow()関数を呼ぶと、即再描画される。

Invalidate();
UpdateWindow();

※Invalidate関数使用法あれこれ

Invalidate(); /*	クライアント領域全体を再描画	*/
InvalidateRect(NULL);	/*	上記と同じ	*/
CRect rect;
GetClientRect(rect);	/*	クライアント領域を取得	*/
InvalidRect(rect);
CRect rect(0, 0, 100, 200);
InvalidateRect(rect);
CRect rect;
rect.SetRect(0, 0, 100, 200);
InvalidRect(rect);
InvalidRect(CRect(0, 0, 100, 200));

※画面クリアあれこれ
・ボタン押下時のハンドラ等がInvalidate()を呼ぶようにしておき、
OnDraw関数内に、画面クリアする処理(すなわち何も表示しない分岐)を追加すればよい。
・CDCクラスのFillSolidRect()メンバ関数も使える

CClientDC myCDC(this);
CRect rect;
GetClientRect(rect);
myCDC.FillSolidRect(rect, RGB(255,255,255));

特定のメッセージに対応するには

クラスビューでダイアログクラスを選択し、プロパティウィンドウ-オーバーライドボタンで
表示される一覧から以下関数を表示させ、編集する。

PreTranslateMessage(MSG* pMsg){
if(pMsg->message == WM_KEYDOWN){
	switch(pMsg->wParam){
		case VK_RETURN : 
		/*	ここに何かの処理	*/
		return TRUE;
		break;
		default:
		break;
	}
}

次回はコントロールの扱いに入ります。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です