實作對話方塊
有兩種方式可將對話框新增至ATL專案:使用ATL對話框精靈或手動新增。
使用 ATL 對話框精靈新增對話框
在 [ 新增類別] 對話框中,選取 ATL Dialog 物件,將對話框新增至 ATL 專案。 視需要填入 ATL 對話框精靈,然後按兩下 [ 完成]。 精靈會將衍生自 CAxDialogImpl 的 類別新增至您的專案。 從 [檢視] 功能表開啟 [資源檢視],找出您的對話框,然後按兩下以在資源編輯器中開啟它。
注意
如果您的對話框衍生自 CAxDialogImpl
,它可以同時裝載 ActiveX 和 Windows 控件。 如果您不希望對話框類別中的 ActiveX 控制項支援額外負荷,請改用 CSimpleDialog 或 CDialogImpl 。
訊息和事件處理程式可以從 [類別檢視] 新增至您的對話框類別。 如需詳細資訊,請參閱 新增 ATL 訊息處理程式。
手動新增對話框
實作對話框類似於實作視窗。 您可以從 CAxDialogImpl、CDialogImpl 或 CSimpleDialog 衍生類別,並宣告訊息對應來處理訊息。 不過,您也必須在衍生類別中指定對話框範本資源識別碼。 您的類別必須有名為 IDD
的數據成員,才能保存此值。
注意
當您使用 ATL 對話框精靈建立對話框時,精靈會自動將成員新增 IDD
為 enum
類型。
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*/);
};