VC++の使い方

VC++の使い方 > リファレンス > GUIリファレンス > ウインドウプロシージャのまとめ
このページの内容
ウインドウプロシージャの違い
一般的なウインドウ プロシージャ
ダイアログプロシージャ
MDI フレームウインドウ
MDI 子ウインドウ
ありがたいスポンサー様
All About ソフトウエアエンジニア
ネットで8%割引!自動車保険はアメリカンホーム・ダイレクト
人生の「チャンス」と「ピンチ」にモビット!
保険料が一生上がらない、保険料最大50%割引の一生涯の医療保険!

ウインドウプロシージャの違い

Win32 SDK アプリケーションを書くにあたって、ウインドウプロシージャの実装は必要不可欠です。しかし、ウインドウプロシージャの実装方法はどのようなウインドウであるかによって違ってきます。わかりやすいところで行くと、ダイアログ プロシージャと一般的なウインドウプロシージャでは、戻り値の値を変えなければなりません。

ここでは、そのような違いをまとめてみたいと思います。

一般的なウインドウ プロシージャ

プロトタイプ宣言

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uiMsg,WPARAM wParam,LPARAM lParam);

戻り値

処理した場合
処理の結果を返す。通常は 0(例外あり)。
処理しなかった場合
DefWindowProc(hWnd,uiMsg,wParam,lParam); の戻り値

ダイアログプロシージャ

プロトタイプ宣言

BOOL CALLBACK DialogProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam);

戻り値

処理した場合
TRUE を返す。WM_INITDIALOG のみ例外。
処理しなかった場合
FALSE を返す。

MDI フレームウインドウ

MDI の子ウインドウを格納するウインドウのことをフレームウインドウと呼ぶ。一般的なウインドウプロシージャと同じように実装すればよいが、デフォルトの処理プロシージャを変更しなくてはならない。

プロトタイプ宣言

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uiMsg,WPARAM wParam,LPARAM lParam);

戻り値

処理した場合
処理の結果を返す。通常は 0(例外あり)。
処理しなかった場合
DefFrameProc(hWnd,hClientWnd,uiMsg,wParam,lParam);の戻り値を返す。

特徴

以下のメッセージを正しく処理してくれる。これによって、特に複雑な実装をすることなく、フレームウインドウを作ることができる。しかし、WM_COMMAND, WM_SIZE などは特別な実装を行いたい場合は、必要な処理を記述したあとに DefFrameProc の戻り値を返せばよいだろう。

MDI 子ウインドウ

プロトタイプ宣言

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uiMsg,WPARAM wParam,LPARAM lParam);

戻り値

処理した場合
処理の結果を返す。通常は 0(例外あり)。
処理しなかった場合
DefMDIChildProc(hWnd,uiMsg,wParam,lParam); の戻り値を返す。

特徴

以下のメッセージを正しく処理してくれる。これによって、特に複雑な実装をすることなく、MDI子ウインドウを作ることができる。