实现对话框

可通过两种方式将对话框添加到 ATL 项目:使用 ATL 对话框向导或手动添加。

使用 ATL 对话框向导添加对话框

“添加类”对话框中,选择 ATL 对话框对象,将对话框添加到 ATL 项目。 根据需要填写 ATL 对话框向导,然后单击“完成”。 向导将派生自 CAxDialogImpl 的类添加到项目中。 从“视图”菜单中打开“资源视图”,找到对话框,然后双击并在资源编辑器中打开。

注意

对话框若派生自 CAxDialogImpl,则可以托管 ActiveX 和 Windows 控件。 如果不希望对话框类中的 ActiveX 控件支持产生开销,请改用 CSimpleDialogCDialogImpl

可以从类视图将消息和事件处理程序添加到对话框类。 有关详细信息,请参阅添加 ATL 消息处理程序

手动添加对话框

实现对话框类似于实现窗口。 从 CAxDialogImplCDialogImplCSimpleDialog 派生类,并声明一个消息映射来处理消息。 但是,还必须在派生类中指定对话框模板资源 ID。 类必须有调用 IDD 的数据成员才能保存此值。

注意

使用 ATL 对话框向导创建对话框时,向导会自动将 IDD 成员添加为 enum 类型。

CDialogImpl 允许实现托管 Windows 控件的模式或无模式对话框。 CAxDialogImpl 允许实现托管 ActiveX 和 Windows 控件的模式或无模式对话框。

若要创建模式对话框,请创建 CDialogImpl 派生(或 CAxDialogImpl 派生)类的实例,然后调用 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*/);
};

另请参阅

窗口类