本质上都是窗口程序,可以说都可以实现同样的功能。
区别
对话框
更适合进行人机交互,用来接收用户的请求。
基于对话框类似“计算器”这样的应用程序,没有需要处理的文档。
对话框可以方便的使用控件,所见即所得的编程,比较方便。
VC的代码向导使设计对话框比较容易,代码向导则简化了在对话框中初始化和验证控件的过程和收集用户输入的值的过程。
文档视图架构
文档视图架构适合图形化展示和文字处理。
文档/视图框架对于菜单、工具条和状态栏等UI元素有更好的包装,适应于需要对文件进行较多处理的应用。
MFC 将数据管理分成文档类和视图类。文档存储数据并协调更新多个视图。视图显示数据并管理用户与数据之间的交互,包括选择和编辑。MFC 文档/视图结构使支持多视图、多文档类型、拆分窗口和其他有价值的用户界面功能变得容易。
单文档
单文档类似“记事本”这样的应用程序,是文件处理软件的开发基础,只是每个进程仅处理一个文档(与多文档相比较)。
多文档
Multi仅仅是说能够“同时”打开多个文档(这些文档的类型可以相同也可以不同)
因为如果要单文档程序打开多个文档就要启动多个进程
但是,一个"CMultiDocTeplate对象"只能打开一种类型的文档
因为CMultiDocTeplate对象的成员CPtrList m_docList只是指向该CMultiDocTeplate对象能支持的文档,并且他们是“同一种”类型的
打开多种类型的文档需要构造多个CMultiDocTeplate对象
因为这是CMultiDocTemplate的构造函数决定的
Multidoctemplate * pDocTemplate=new CMultiDocTeplate(IDR,
CRunTimeClass(
mydoc1
),
CRunTimeClass(frameALL)
CRunTimeClass(ViewAll)
);
addDocTemplate(pDocTemplate)时,您的程序其实仅仅支持一“种”文档——
mydoc1
类型的文档,只不过可以同时打开很多“个”“这种类型”的文档
应用场景
一般来说,简单的程序用对话框框架,复杂一些的用文档/视图框架,但是没有硬性规定。
类结构
基于对话框(3个类)
CAboutDlg
程序名App
程序名Dlg
单文档(5个类)
CAboutDlg
CMainFrame
程序名App
程序名Doc
程序名View
多文档(6个类)
CAboutDlg
CMainFrame
程序名App
程序名Doc
程序名View
CChildFrame