ダイアログボックスプロシージャ
Win32 API "DialogProc()" 関数
※ Win32 API で "DialogProc()" という固有な関数名になっているのは、統一的な説明のためです。

 

 ダイアログボックスを利用するには、以下のような"ダイアログボックスプロシージャ"の記述(関数定義) が必要です。

 これは、コンパイル可能な全コードではなく、部分です。

 本当にスケルトンといえるとしたら、黒い太字の部分くらいになるでしょう。

 これくらいだったら自分で使ってもいいかな、という程度にしてあります。

 ダイアログプロシージャ "DlgProc1()" の例です。


LRESULT CALLBACK DlgProc1( HWND, UINT, WPARAM, LPARAM ) ; // プロトタイプ宣言. LRESULT CALLBACK DlgProc1( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ) { switch( msg ) { case WM_INITDIALOG : return FALSE ; // TRUE ; case WM_COMMAND : switch( LOWORD( wp )) { case IDOK : break ; case IDCANCEL : break ; // case ID_BUTTON1 : break ; } break ; case WM_CLOSE : // DestroyWindow( hWnd ) ; // CreateDialog() 関数による場合(モードレスダイアログの場合). // EndDialog( hWnd , 0 ) ; // DialogBox() 関数による場合(モーダルダイアログの場合). break ; case WM_DESTROY : break ; } return FALSE ; }




WM_INITDIALOG
は、ダイアログボックスが "表示される直前" に受け取るメッセージです。ここで自分のダイアログボックスの準備などをします。

 
 HWND hDlg = CreateDialog( GetModuleHandle(NULL), "MYDIALOG", NULL, (DLGPROC)DlgProc1 ) ; // モードレスダイアログボックス.
   int ret =    DialogBox( GetModuleHandle(NULL), "MYDIALOG", NULL, (DLGPROC)DlgProc1 ) ; // モーダルダイアログボックス.  


のように使います。戻り値の格納は必要によります。ほったらかしても構いません
.

 ・ GetModuleHandle(NULL) の部分は、アプリケーションの始めにグローバル変数等に保存しておいたインスタンスハンドル hAppInst (など) でも構いません.

 ・"MYDIALOG" はリソーススクリプトに記述等して定義した、ダイアログボックスのテンプレート名です.

 ・ モーダルダイアログボックス用である、DialogBox() 関数 は、そのダイアログボックスが閉じられるまで制御を返しません。戻り値は int 型の整数で、ダイアログ終了関数 EndDialog() 関数の第二引数に"自分で与えた(る)数値" (終了コード)です。
   モーダルダイアログボックスのウィンドウハンドルが欲しい場合は、ダイアログプロシージャ内で受け取ることのできるハンドル
(上記で hWnd パラメータ)をどうにかしましょう。この値は常に同じ値が渡されます。ダイアログボックス本体のウィンドウハンドルです.

 

 

[トップ] [戻る]