Implementing a Dialog Box
有兩種方式可以將對話方塊加入至 ATL 專案:使用 ATL 對話方塊精靈或手動加入。
加入 ATL 對話方塊精靈的對話方塊。
在 加入類別對話方塊。,選取 ATL 對話方塊物件將對話方塊加入至 ATL 專案。 填入 ATL 對話方塊精靈為適當並按一下 完成。 精靈會將 CAxDialogImpl 從衍生的類別加入至專案。 開啟 [檢視] 從 功能表上的 [資源檢視] 中,找出您的對話方塊,然後按兩下以開啟 [資源編輯器。
![]() |
---|
如果您的對話方塊 CAxDialogImpl從衍生自類別,它可以裝載 ActiveX 控制項和視窗。如果您不想要額外負荷在您的對話方塊類別的 ActiveX 控制項支援,請使用 CSimpleDialog 或 CDialogImpl 。 |
訊息和事件處理常式可以加入至對話方塊類別從 [類別檢視]。 如需詳細資訊,請參閱加入 ATL 訊息處理常式。
手動加入對話方塊
實作對話方塊類似於實作視窗。 您從 CAxDialogImpl、 CDialogImpl或 CSimpleDialog 衍生類別並宣告 訊息對應 處理訊息。 不過,您可以在您的衍生類別也必須指定對話方塊樣板資源 ID。 您的類別必須有資料成員呼叫這個運算式值的 IDD 。
![]() |
---|
使用 ATL 對話方塊精靈時,當您建立對話方塊,則會自動將 IDD 成員做為 enum 型別。 |
CDialogImpl 可讓您實作該強制回應或非強制回應對話方塊主視窗控制項。 CAxDialogImpl 可讓您實作裝載 ActiveX 控制項和視窗的強制回應或非強制回應對話方塊。
若要建立強制回應對話方塊,請建立您自己的執行個體 CDialogImpl衍生的 (或 CAxDialogImpl衍生) 類別來呼叫 DoModal 方法。 若要關閉強制回應對話方塊,請呼叫從訊息處理常式的 EndDialog 方法。 若要建立非強制回應對話方塊,請呼叫 建立 方法 (而不是 DoModal。 若要終結非強制回應對話方塊,請呼叫 DestroyWindow。
接收事件。 CAxDialogImpl自動呼叫。 實作對話方塊的訊息處理常式,您會 CWindowImpl之處理常式的衍生類別。 如果有特定訊息傳回值,請將它當做 LRESULT。 傳回的 LRESULT 值由適當處理 ATL 對應由 Windows 對話方塊處理常式。 如需詳細資訊,請為 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*/);
};