共用方式為


實作對話方塊

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

使用 ATL 對話方塊精靈新增對話方塊

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

注意

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

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

手動新增對話方塊

實作對話方塊類似于實作視窗。 您可以從 CAxDialogImpl、 CDialogImpl CSimpleDialog 衍生類別 ,並宣告 訊息對應 來處理訊息。 不過,您也必須在衍生類別中指定對話方塊範本資源識別碼。 您的類別必須有名為 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*/);
};

另請參閱

視窗類別