实现对话框
可通过两种方式将对话框添加到 ATL 项目:使用 ATL 对话框向导或手动添加。
使用 ATL 对话框向导添加对话框
在“添加类”对话框中,选择 ATL 对话框对象,将对话框添加到 ATL 项目。 根据需要填写 ATL 对话框向导,然后单击“完成”。 向导将派生自 CAxDialogImpl 的类添加到项目中。 从“视图”菜单中打开“资源视图”,找到对话框,然后双击并在资源编辑器中打开。
注意
对话框若派生自 CAxDialogImpl
,则可以托管 ActiveX 和 Windows 控件。 如果不希望对话框类中的 ActiveX 控件支持产生开销,请改用 CSimpleDialog 或 CDialogImpl。
可以从类视图将消息和事件处理程序添加到对话框类。 有关详细信息,请参阅添加 ATL 消息处理程序。
手动添加对话框
实现对话框类似于实现窗口。 从 CAxDialogImpl、CDialogImpl 或 CSimpleDialog 派生类,并声明一个消息映射来处理消息。 但是,还必须在派生类中指定对话框模板资源 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*/);
};