次の方法で共有


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

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

ATL ダイアログ ウィザードを使用したダイアログ ボックスの追加

クラスの追加]ダイアログ ボックスで、ATL プロジェクトにダイアログ ボックスを追加するために ATL ダイアログ オブジェクトを選択します。をクリック [完了]適切として ATL ダイアログ ウィザードを入力します。ウィザードは CAxDialogImpl から派生したクラスをプロジェクトに追加します。[表示] のメニューの[リソース ビューを開き、ダイアログを見つけ、リソース エディターで開きます。をダブルクリックします。

[!メモ]

ダイアログ ボックスに CAxDialogImplから派生している場合、ActiveX コントロールと Windows 両方のコントロールをホストできます。ダイアログ ボックスのクラスの ActiveX コントロールのサポートのオーバーヘッドが不要な場合は、CSimpleDialogCDialogImpl を使用します。

メッセージとイベント ハンドラーは、クラス ビューから、ダイアログ クラスに追加できます。詳細については、「ATL メッセージ ハンドラーの追加」を参照してください。

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

ダイアログ ボックスを実装すると、ペインの実装に似ています。CAxDialogImplCDialogImpl、または CSimpleDialog からクラスを派生し、メッセージに メッセージ マップ を宣言します。ただし、の派生クラスでダイアログ テンプレート リソースの ID を指定する必要があります。このクラスは、この値を保持する IDD というデータ メンバーが必要です。

[!メモ]

ATL ダイアログ ウィザードを使用してダイアログ ボックスを作成すると、ウィザードは enum の型として自動的に IDD のメンバーを追加します。

CDialogImpl は Windows コントロールをホストするモーダルまたはモードレス ダイアログ ボックスを実装できるようにします。CAxDialogImpl は、ActiveX コントロールと Windows 両方のコントロールをホストするモーダルまたはモードレス ダイアログ ボックスを実装できるようにします。

モーダル ダイアログ ボックスを作成するには、の CDialogImplのインスタンスを派生 (または派生 CAxDialogImpl-) を作成します。クラスは、DoModal のメソッドを呼び出して、モーダル ダイアログ ボックスを閉じるには、メッセージ ハンドラーから EndDialog のメソッドを呼び出します。モードレス ダイアログ ボックスを作成するには、DoModalの代わりに [作成] のメソッドを呼び出します。モードレス ダイアログ ボックスを破棄するには、DestroyWindowを呼び出します。

イベントをシンクすることは CAxDialogImplで自動的に行われます。派生クラスのハンドラー CWindowImplように、ダイアログ ボックスのメッセージ ハンドラーを実装します。メッセージ固有の戻り値がある場合は、LRESULTとして返します。LRESULT の返された値は、Windows のダイアログ マネージャーに応じて適切な処理のために ATL によって割り当てられます。詳細については、atlwin.h の CDialogImplBaseT::DialogProc については、ソース・コードを参照してください。

使用例

次のクラスはダイアログ ボックスを実装します:

class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
   enum { IDD = IDD_MYDLG };

   BEGIN_MSG_MAP(CMyDialog)
      MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
      COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnClickedCancel)
   END_MSG_MAP()

   LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some initialization code
      return 1;
   }
public:
   LRESULT OnBnClickedCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
};

参照

その他の技術情報

ATL ウィンドウ クラス