ATL プロジェクトにダイアログ ボックスを追加するには、2 つの方法があります: ATL オブジェクト ウィザードを使用するか、手動で追加。
ATL オブジェクト ウィザードで (挿入メニューの [ ATL オブジェクトの新規コマンド)、左側のウィンドウでその他のカテゴリを強調表示し、ダイアログオブジェクトを ATL プロジェクトにダイアログ ボックスを追加するには、右側のウィンドウでをダブルクリックします。ATL オブジェクト ウィザードのプロパティ] ダイアログ ボックスで、必要に応じて入力し、 [ok]をクリックします。ATL オブジェクト ウィザードCAxDialogImplからあなたのプロジェクトには、派生クラスを追加し、リソース エディターをダイアログ ボックス テンプレートを開く。
注特価;ダイアログ ボックスCAxDialogImplから派生している場合は、ActiveX と Windows の両方のコントロールをホストできます。代わりに、ダイアログ ボックス クラスに ActiveX コントロール サポートのオーバーヘッドをしたくない場合は、 CSimpleDialogまたはCDialogImplを使用します。(&N)。
メッセージ、およびイベント ハンドラー ダイアログ クラスをクラス ビューからは、MFC クラスと同じ方法で追加できます。クラス、クラスを右クリックし、新しい Windows メッセージとイベント ハンドラー 」ダイアログを開くにはWindows メッセージ ハンドラーの追加」を選択します。詳細については、メッセージ ハンドラーの追加を参照してください。
ダイアログ ボックス テンプレートから新しい Windows メッセージとイベント ハンドラー ] ダイアログ ボックスを開くには、コントロールをダイアログ ボックス テンプレートでを右クリックし、ショートカット メニューの [イベントコマンド。ATL プロジェクトでは、ダイアログ ボックス クラス、クラスまたは処理するオブジェクト] ボックスで強調表示されます;コントロール、MFC プロジェクトでは、強調表示されているに対し、。
ダイアログ ボックスの実装は、ウィンドウの実装に似ています。CAxDialogImpl、 CDialogImpl、またはCSimpleDialogからクラスを派生し、メッセージを処理するには、メッセージ マップを宣言します。ただし、派生クラスでも、ダイアログ テンプレート リソース ID を指定する必要があります。クラス データ メンバーと呼ばれる必要があります IDD
この値を保持するには。
注特価;ATL オブジェクト ウィザードを使用してダイアログ ボックスを作成すると、ウィザードが自動的に追加されます、 IDD
、列挙型のメンバー(&N)。
CDialogImplでは、モーダルまたは Windows コントロールをホストするモードレス ダイアログ ボックスを実装することができます。CAxDialogImplはモーダルまたは ActiveX と Windows の両方のコントロールをホストするモードレス ダイアログ ボックスを実装することができます。
モーダル ダイアログ ボックスを作成するには、あなたのCDialogImplのインスタンスを作成-派生 (またはCAxDialogImpl-派生) クラスし、 DoModalメソッドを呼び出します。モーダル ダイアログ ボックスを閉じるには、メッセージ ハンドラーからEndDialogメソッドを呼び出します。モードレス ダイアログ ボックスを作成するには、 domodal 関数の代わりにCreateメソッドを呼び出します。モードレス ダイアログ ボックスを破棄するには、 DestroyWindow ををコールします。
ダイアログ ボックス オブジェクトが含まれている ActiveX コントロール、およびこれらのコントロールからのイベントを処理している場合は、すべての ActiveX コントロール インターフェイスのアドバイズし、助言する必要があります。これは、次のコード行を追加することによって行うことができます、 InitDialog
関数:
AtlAdviseSinkMap (pMyDlg, TRUE)
すべての ActiveX コントロールをアドバイズするには、次の行のコードを追加して EndDialog
関数 (または、ダイアログ ボックス オブジェクトの終了時に呼び出された関数):
AtlAdviseSinkMap (pMyDlg, FALSE)
CWindowImplのハンドラーと同様に] ダイアログ ボックスのメッセージ ハンドラーを実装-クラスを派生します。メッセージ固有の戻り値がある場合は、それを返す、 LRESULT
。返された LRESULT
値 Windows ダイアログ マネージャーによって適切な処理を ATL によってマップされます。詳細については、ソース コードをCDialogImplBaseT::DialogProcに atlwin.h で参照してください。
例
次のクラスを実装するダイアログ ボックス:
cMyDialog クラス: 公共の CDialogImpllt;CMyDialog >、.{パブリック。列挙 {IDD IDD_MYDIALOG を =};BEGIN_MSG_MAP(CMyDialog)割り当てます (WM_INITDIALOG、OnInitDialog)END_MSG_MAP()LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){//いくつかの初期化を行うコード1 を返す;}}