上一页 下一页 返回

小 结

  本课的要点为: 

  对话框的设计包括对话框模板的设计和对话框类的设计。对话框模板的设计是通过模板编辑器来完成的。对话框类的设计可借助ClassWizard来完成,这包括创建CDialog类的派生类,为对话框类增加与控件对应的成员变量,增加控件通知消息的处理函数等。 

  对话框的数据成员的初始化工作一般在其构造函数中完成,而对话框和控件的初始化是在OnInitDialog函数中完成的。 

  模态对话框拥有自己的消息循环,它垄断了用户的输入。模态对话框对象是以变量的形式构建的,CDialog::DoModal用来启动一个模态对话框,在对话框关闭后该函数才返回。如果用户按下了IDOK按钮确认设置,那么DoModal返回IDOK,若用户按下了IDCANCEL按钮取消设置,则DoModal返回IDCANCEL。 

  非模态对话框与应用程序共用消息循环,它不垄断用户的输入。非模态对话框对象应该用new操作符在堆中创建,应该调用CDialog::Create而不是CDialog::DoModal来显示对话框,需要注意对话框的可见性问题。应该调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框,所以一般需要重新编写OnOK和OnCancel函数。非模态对话框对象应该是自动清除的,所以应该重写PostNcDestroy函数并在该函数中用delete删除对象本身。

  除了主框架窗口类、视图类和非模态对话框类以外,MFC的窗口类一般都是非自动清除的。不必调用delete来删除一个具有自动清除功能的窗口对象。 

  标签式对话框由多个页(子对话框)组成,可以容纳大量的控件。CPropertySheet类代表对话框的框架,CPropertyPage类代表莫一页。标签式对话框有一个特殊的Apply按钮,可以使用户在不退出对话框的情况下使设置生效。 

  Windows支持五种公用对话框,包括文件选择、颜色选择、字体选择、打印和打印设置以及正文搜索和替换对话框。正文搜索和替换对话框与其它公用对话框不同,它是一个非模态对话框。