ダイアログボックスの表示(モーダル)[Win32SDK]
モーダルダイアログを簡単に表示させるには DialogBoxマクロを使います。 実際の内部ではCreateWindow系関数を使ってダイ
アログを生成・表示しています。このマクロはEndDialogマクロが呼び出されるまで、制御が戻ってきません。このマクロの戻り値
はEndDialogマクロの第2引数です。
int DialogBox(
HINSTANCE hInstance, /*アプリケーションのインスタンス*/
LPCTSTR lpTemplate, /*ダイアログテンプレートを示す文字列*/
HWND hWndParent, /*親ウィンドウのウィンドウハンドル*/
DLGPROC lpDialogFunc /*ダイアログウィンドウプロシージャのアドレス*/
);
lpDialogFuncはダイアログウィンドウプロシージャのアドレスです(ある関数の関数名自体は、その関数のアドレスを表わします)。
ダイアログウィンドウプロシージャはダイアログ上で発生したメッセージを受ける関数です。ダイアログボックスを作ったときは、
ダイアログひとつに対しダイアログウィンドウプロシージャひとつ作らなくてはいけません。ダイログウィンドウプロシージャは以下
のように定義します。
BOOL CALLBACK DialogProc(
HWND hwndDlg, /* ダイアログボックスのウィンドウハンドル*/
UINT uMsg, /* メッセージ*/
WPARAM wParam, /* パラメーター1*/
LPARAM lParam /* パラメーター2*/
);
普通のウィンドウプロシージャとは違い戻り値はBOOL型になっています。また、返す値は以下のように決めます。
・WM_INITDIALOGメッセージを処理した時、SetFocus関数でダイアログ上のコントロールにフォーカスを割当てたときは
FALSEを、そうでない場合はTRUEを返す。
・WM_INITDIALOGメッセージ以外のメッセージを処理した時、TRUEを返す。
・メッセージを処理しなかった場合、FALSEを返す。
ダイアログを閉じるにはEndDialogマクロを使います。
BOOL EndDialog(
HWND hDlg, /* 閉じるダイアログのウィンドウハンドル*/
int nResult /* DialogBoxマクロが返す値*/
);