ダイアログ ボックスの実装

ATL プロジェクトにダイアログ ボックスを追加するには、2 つの方法があります: ATL オブジェクト ウィザードを使用するか、手動で追加。

ATL オブジェクト ウィザード ダイアログ ボックスの追加

ATL オブジェクト ウィザードで (挿入メニューの [ ATL オブジェクトの新規コマンド)、左側のウィンドウでその他のカテゴリを強調表示し、ダイアログオブジェクトを ATL プロジェクトにダイアログ ボックスを追加するには、右側のウィンドウでをダブルクリックします。ATL オブジェクト ウィザードのプロパティ] ダイアログ ボックスで、必要に応じて入力し、 [ok]をクリックします。ATL オブジェクト ウィザードCAxDialogImplからあなたのプロジェクトには、派生クラスを追加し、リソース エディターをダイアログ ボックス テンプレートを開く。

特価;ダイアログ ボックスCAxDialogImplから派生している場合は、ActiveX と Windows の両方のコントロールをホストできます。代わりに、ダイアログ ボックス クラスに ActiveX コントロール サポートのオーバーヘッドをしたくない場合は、 CSimpleDialogまたはCDialogImplを使用します。(&N)。

メッセージ、およびイベント ハンドラー ダイアログ クラスをクラス ビューからは、MFC クラスと同じ方法で追加できます。クラス、クラスを右クリックし、新しい Windows メッセージとイベント ハンドラー 」ダイアログを開くにはWindows メッセージ ハンドラーの追加」を選択します。詳細については、メッセージ ハンドラーの追加を参照してください。

ダイアログ ボックス テンプレートから新しい Windows メッセージとイベント ハンドラー ] ダイアログ ボックスを開くには、コントロールをダイアログ ボックス テンプレートでを右クリックし、ショートカット メニューの [イベントコマンド。ATL プロジェクトでは、ダイアログ ボックス クラス、クラスまたは処理するオブジェクト] ボックスで強調表示されます;コントロール、MFC プロジェクトでは、強調表示されているに対し、。

ダイアログ ボックスを手動で追加します。

ダイアログ ボックスの実装は、ウィンドウの実装に似ています。CAxDialogImplCDialogImpl、または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 を返す;}}

Index