モードレス・ダイアログボックスの使用

モードレス・ダイアログボックスを表示するには,DLGMODELESS 関数を呼び出します。モードレス・ダイアログボックスは,明示的に,またはボタンの基本コールバックによって DLGEXIT ルーチンが呼び出されるまで表示されたままになります。アプリケーションは Windows メッセージを処理するメッセージ・ループを提供し,メッセージ・ループの先頭で DLGISDLGMESSAGE 関数を呼び出さなくてはなりません。

DLGMODELESS に渡される DIALOG 型の変数は,ダイアログボックスが存在している間はメモリー内に残っていなくてはなりません (DLGUNINIT 呼び出しを通しての DLGINIT 呼び出し)。変数の宣言は,Fortran モジュール中の大域データとして,STATIC 属性 (または文) で指定された変数として,またはダイアログボックスが存在している間は活動状態になっている呼び出し側手続中で行うことができます。詳細については,DLGMODELESS の構文を参照してください。

モードレス・ダイアログボックスは,一般的に Fortran Windows プロジェクトで使用します。モードレス・ダイアログボックスの使用に対する要求 (前の節で説明) に一致していれば,モードレス・ダイアログボックスを Fortran Console,Fortran DLL,Fortran Static Library で使用することができます。サンプルは,Visual Fortran サンプル ...\Df98\Samples\Dialog\Dllprgrs を参照してください。

モードレス・ダイアログボックスの使用例として,次に,モードレス・ダイアログボックスを主ウィンドウとして表示するアプリケーションの WinMain 関数のコードを示します。

	integer*4 function WinMain(hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
!DEC$ IF DEFINED(_M_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : '_WinMain@16' :: WinMain
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : 'WinMain' :: WinMain
!DEC$ ENDIF
	use dfwin
	use dflogm
integer(4) hInstance integer(4) hPrevInstance integer(4) lpszCmdLine integer(4) nCmdShow ! リソース・エディタが提供する定数値を取り込みます。 include 'resource.fd' ! ダイアログボックス・コールバック external ThermometerSub ! 変数 type (dialog) dlg type (T_MSG) mesg integer(4) ret logical(4) lret ! Thermometer ダイアログボックスを作成し, ! コントロールとコールバックを設定します。 lret = DlgInit(IDD_THERMOMETER, dlg_thermometer) lret = DlgSetSub(dlg_thermometer, IDD_THERMOMETER, ThermometerSub) lret = DlgSet(dlg_thermometer, IDC_PROGRESS1, 32, DLG_RANGEMIN) lret = DlgSet(dlg_thermometer, IDC_PROGRESS1, 212, DLG_RANGEMAX) lret = DlgSet(dlg_thermometer, IDC_PROGRESS1, 32) lret = DlgModeless(dlg_thermometer, nCmdShow) ! PostQuitMessage が呼び出されているため, ! GetMessage が 0 を返すまで,メッセージを読み処理します。 do while( GetMessage (mesg, NULL, 0, 0) ) ! ダイアログボックスにメッセージでの最初の機会を与えるために, ! DlgIsDlgMessage が呼び出されなければならないことに注意してください。 if ( DlgIsDlgMessage(mesg) .EQV. .FALSE. ) then lret = TranslateMessage( mesg ) ret = DispatchMessage( mesg ) end if end do ! ダイアログボックス・メモリーをクリアします。 call DlgUninit(dlg) ! 戻り値は Quit メッセージの wParam です。 WinMain = mesg.wParam return end