實作對話方塊
有兩種方式可將對話方塊新增至 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*/);
};
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應