有两种方式将对话框添加到您的ATL项目:使用ATL对话框向导"或手动添加。
将ATL对话框向导的对话框
在 添加选件类对话框,选择ATL对话框对象添加对话框向ATL项目。填充ATL对话框向导"为合适然后单击 Finish。该向导将从 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 方法。若要创建无模式对话框,请调用 创建 方法而不是 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*/);
};