共用方式為


實作對話方塊

有兩種方式可將對話框新增至ATL專案:使用ATL對話框精靈或手動新增。

使用 ATL 對話框精靈新增對話框

在 [ 新增類別] 對話框中,選取 ATL Dialog 物件,將對話框新增至 ATL 專案。 視需要填入 ATL 對話框精靈,然後按兩下 [ 完成]。 精靈會將衍生自 CAxDialogImpl 的 類別新增至您的專案。 從 [檢視] 功能表開啟 [資源檢視],找出您的對話框,然後按兩下以在資源編輯器中開啟它。

注意

如果您的對話框衍生自 CAxDialogImpl,它可以同時裝載 ActiveX 和 Windows 控件。 如果您不希望對話框類別中的 ActiveX 控制項支援額外負荷,請改用 CSimpleDialogCDialogImpl

訊息和事件處理程式可以從 [類別檢視] 新增至您的對話框類別。 如需詳細資訊,請參閱 新增 ATL 訊息處理程式

手動新增對話框

實作對話框類似於實作視窗。 您可以從 CAxDialogImpl、CDialogImplCSimpleDialog 衍生類別,並宣告訊息對應來處理訊息。 不過,您也必須在衍生類別中指定對話框範本資源識別碼。 您的類別必須有名為 IDD 的數據成員,才能保存此值。

注意

當您使用 ATL 對話框精靈建立對話框時,精靈會自動將成員新增 IDDenum 類型。

CDialogImpl 可讓您實作裝載 Windows 控制件的強制回應或無模式對話方塊。 CAxDialogImpl 可讓您實作裝載 ActiveX 和 Windows 控件的強制回應或無模式對話方塊。

若要建立強制回應對話框,請建立衍生 (或 CAxDialogImpl-derived) 類別的CDialogImpl實例,然後呼叫 DoModal 方法。 若要關閉強制回應對話框,請從訊息處理程式呼叫 EndDialog 方法。 若要建立無模式對話框,請呼叫 Create 方法, DoModal而不是 。 若要終結無模式對話框,請呼叫 DestroyWindow

接收事件會在 CAxDialogImpl自動完成。 實作對話框的訊息處理程式,就像您在衍生類別中的處理程序一 CWindowImpl樣。 如果有訊息特定的傳回值,請將它當做 LRESULT傳回。 傳回 LRESULT 的值會由 ATL 對應,以供 Windows 對話框管理員正確處理。 如需詳細資訊,請參閱 atlwin.h 中 CDialogImplBaseT::D ialogProc 的原始程式碼

範例

下列類別會實作對話框:

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*/);
};

另請參閱

窗口類別