個々のダイアログボックスには,dialog 構造型の変数が関連付けられています。dialog 構造型は DFLOGM.F90 モジュールに定義されており,これを参照するには USE DFLOGM を使用します。ダイアログ・アプリケーションを作成する時には,ダイアログボックスを dialog 構造型の変数として引用します。次に例を示します。
USE DFLOGM INCLUDE 'RESOURCE.FD' TYPE (dialog) dlg LOGICAL return return = DLGINIT( IDD_TEMP, dlg )
このコードは,dialog 構造型をリソースとインクルード・ファイル (この例では TEMP.RC と RESOURCE.FD) に定義されているダイアログ (この例では IDD_TEMP) と関連付けます。
アプリケーションがダイアログ・リソース・ファイルを参照できるようにするには,プロジェクトに .RC ファイルを追加します。アプリケーションがダイアログ・インクルード・ファイルを参照できるようにするには,個々の副プログラムに .FD ファイルをインクルードします。これらのファイルのダイアログ・プロパティにダイアログ・タイプを関連付けるには,ダイアログ名を指定して DLGINIT を呼び出します。
ダイアログボックスを制御するアプリケーションは,次の動作を実行しなくてはなりません。
DLGINIT または DLGINITWITHRESOURCEHANDLE を呼び出してダイアログ・タイプを初期化し,ダイアログとそのプロパティをそのタイプに関連付けます。
DLGSET などのダイアログ設定関数を使って,コントロールを初期化します。
DLGSETSUB を使って,ユーザーがダイアログボックス内のコントロールを操作した時に実行されるコールバック・ルーチンを設定します。
モーダル・ダイアログを使用するには,ダイアログを DLGMODAL で実行します。
モードレス・ダイアログを使用するには,DLGMODELESS を呼び出し,メッセージ・ループ中で DLGISDLGMESSAGE を使用します。
DLGGET などのダイアログ取得関数を使って,コントロール情報を取得します。
DLGUNINIT を使って,ダイアログのリソースを解放します。
ダイアログボックスとコントロールを活動状態にする例として,次のコードは,前の例で作成された「Temperature」ダイアログボックスとコントロールを初期化します。また,コールバック・ルーチンを UpdateTemp として設定し,ダイアログボックスを表示し,処理が終わったらダイアログ・リソースを解放します。
SUBROUTINE DoDialog( ) USE DFLOGM IMPLICIT NONE INCLUDE 'RESOURCE.FD' INTEGER retint LOGICAL retlog TYPE (dialog) dlg EXTERNAL UpdateTemp ! 初期化 IF ( .not. DlgInit( idd_temp, dlg ) ) THEN WRITE (*,*) "Error: dialog not found" ELSE ! 温度コントロールを設定します。 retlog = DlgSet( dlg, IDC_SCROLLBAR_TEMPERATURE, 200, DLG_RANGEMAX) retlog = DlgSet( dlg, IDC_EDIT_CELSIUS, "100" ) CALL UpdateTemp( dlg, IDC_EDIT_CELSIUS, DLG_CHANGE) retlog = DlgSetSub( dlg, IDC_EDIT_CELSIUS, UpdateTemp ) retlog = DlgSetSub( dlg, IDC_EDIT_FAHRENHEIT, UpdateTemp ) retlog = DlgSetSub( dlg, IDC_SCROLLBAR_TEMPERATURE,UpdateTemp ) ! モーダル・ダイアログボックスを活動状態にします。 retint = DlgModal( dlg ) ! ダイアログボックス・リソースを開放します。 CALL DlgUninit( dlg ) END IF END SUBROUTINE DoDialog
DLGSET や DLGSETSUB などのダイアログ関数は,リソース・エディタでダイアログボックスを作成した時に,「Properties」ボックスで割り付けた名前を使って,ダイアログ・コントロールを引用します。次に例を示します。
retlog = DlgSet( dlg, IDC_SCROLLBAR_TEMPERATURE, 200, DLG_RANGEMAX)
この文では,ダイアログ関数 DLGSET は,IDC_SCROLLBAR_TEMPERATURE という名前のコントロールに 200 という値を割り付けています。指標 DLG_RANGEMAX は,この値がスクロールバーの最大範囲であることを指定しています。次に別の例を示します。
retlog = DlgSet( dlg, IDC_EDIT_CELSIUS, "100" ) CALL UpdateTemp( dlg, IDC_EDIT_CELSIUS, DLG_CHANGE)
上記の文は,ダイアログの上方のエディットボックス (リソース・エディタで IDC_EDIT_CELSIUS という名前を付けたもの) に初期値 100 を設定し,UpdateTemp ルーチンを呼び出して,値が変更されたことをアプリケーションに通知します。次に別の例を示します。
retlog = DlgSetSub( dlg, IDC_EDIT_CELSIUS, UpdateTemp ) retlog = DlgSetSub( dlg, IDC_EDIT_FAHRENHEIT, UpdateTemp ) retlog = DlgSetSub( dlg, IDC_SCROLLBAR_TEMPERATURE,UpdateTemp )
上記の文は,コールバック・ルーチン UpdateTemp を,3 つのコントロールと関連付けています。
ルーチンをコントロールに割り付けるには,DLGSETSUB 関数を使用します。この関数の第 1 引数は dialog 変数,第 2 引数はコントロール名,第 3 引数はそのコントロールのために作成したルーチン,そして省略可能な第 4 引数は複数のルーチン中から選択を行うための指標です。ダイアログ・コントロールのコールバック・ルーチンは,ダイアログを DLGMODAL または DLGMODELESS で開く前や,別のコールバック・ルーチン中からなど,アプリケーション内の任意の場所で設定することができます。
TEMP サンプルでは,主プログラムは「Temparature Conversion」ダイアログボックスを表示するために DoDialog サブルーチンを呼び出しています。