在VC环境中,你可以使用MFC来创建对话框,你同样也可以使用ATL类来创建对话框。
ATL类是利用模板类的特性来生成新的类的,下面我们介绍一下这个步骤。
首先和MFC中创建对话框程序一样,你需要创建一个资源文件,即建立一个对话框资源,这个可以在VC的资源文件编辑中完成,你可以将窗口画成任意你想要的东西。然后就是创建窗口了,在VC7中很方便直接就可以在添加类的助手中选择添加ATL对话框,那个里面就省很多事情,它将所有的消息隐射都工作,以及基本的消息都做好了。但对于VC6可以就需要自己写代码来实现上面的工作了。在ATL中有一个类CDialogImpl,你可以从这个类继承,然后增加消息映射和消息处理句柄,下面是代码:class CATLDlg:public CDialogImpl<CATDlg>{public: //构造函数 enum { IDD = IDD_CATLDLG };//一定需要的,将你前面定义好的资源ID赋值给成员IDD BEGIN_MSG_MAP(CCATLDlg)//增加消息映射 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)//处理INIT消息
COMMAND_HANDLER(IDOK, BN_CLICKED, OnClickedOK)//处理对话框上的IDOK按钮事件
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnClickedCancel)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy) END_MSG_MAP() LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnClickedOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); }上面是的是h文件中的写法,你只要将函数实现就可以了。最后就是让对话框显示了。对话框有两个方式显示,一种是模式方式,另一种是非摸态;模态情况下只需要首先生成一个该类的实例,然后调用其DoModal方法就可以;非模态情况下,首先要生成实例,然后需要调用Create函数来创建一个窗口,最后使用ShowWindow(SW_SHOW)来将对话框SHOW出来,但在非模态情况且在调式情况,你使用EndDialog来结束窗口的话会有一个ASSERT异常,用来报告该窗口不是模态的,但不并不影响Release情况的运行,而且还可以在调用这个函数之前将窗口的m_bModal设置为TRUE就没有这个错误了。