0、
基于mfc的应用程序。有一个CXXXApp类。这代表了一个应用程序实例,里面有个InitInstance成员,这里是创建窗口的地方。
可以通过改写其中的代码,实现你自己的需求,而MFC的应用程序向导只不过是提供了日常应用的三个标准模板。
你创建一个Dialog,然后DoModal出来,那么它就是基于对话框的;
你创建一个派生自CFrameWnd的类,然后创建它的窗口,并定义一个文档对象,那么它就是基于单文档的了;
多创建一个文档,一个多文档程序也创建出来了。
如果不需要文档支持呢?可以放心把文档类删除。
难道我们仅能创建这三个MFC定义好的应用程序吗?当然不是了,你从CWnd派生一个CYourWnd类,然后Create出来,并把它的窗口句柄赋给CXXXApp的m_pMainWnd, 一个基于psbeond的应用程序诞生了。
————————————————
1、单文档就是一个窗口只能处理一个文档,多文档就是同时可以处理多个,共享工具栏,菜单栏什么的,对话框就是一个提示用户进行选择或者确认的窗体。对话框模板适合于做交互界面,单文档模板适合于做文件处理,多文档模板适合于做多文件处理。不过,还是没法明确这个问题。
对话框模板适合于做交互界面
单文档模板适合于做文件处理
多文档模板适合于做多文件处理
2、单文档:记事本类程序的标准模式,有菜单栏、工具栏等,只能进行一份文档的操作,即不能同时在同一个应用程序中打开两个文件
多文档:WORD类或浏览器程序的标准模式,可多个窗口显示不同的信息,进行不同的任务,有过个视图环境,可同时操作多个文件。多个文件共享同一菜单栏、工具栏等
对话框:可方便的使用控件,所见即所得的编程,没有菜单栏、工具栏等
3、怎样看出一个MFC应用程序是基于单文档、多文档还是对话框?
3.1运行应用程序观看,对话框一般没有菜单栏、工具栏等,单文档和多文档有,另多文档可产生子窗口,会有一个childframe class
3.2从源码中的类观看:
基于对话框—>一般含以下3个类:CAboutDlg、程序名App、程序名Dlg
基于单文档—>一般含以下4个类:CMainFrame、程序名App、程序名Doc、程序名View
基于多文档—>一般含以下5个类:CMainFrame、CChildFrame、程序名App、程序名Doc、程序名View
————————————————
4、
(1)基于对话框(3个类):
1. CAboutDlg
2. 程序名App
3. 程序名Dlg
CAboutDlg(“关于”对话框)
CAboutDlg()
DoDataExchange(CDataExchange* pDX)
CMyApp(应用程序类)
CMyApp()
InitInstance()
CMyDlg(对话框类)
CMyDlg(CWnd* pParent /*=NULL*/)
DoDataExchange(CDataExchange* pDX)
OnInitDialog()
OnPaint()
OnQueryDragIcon()
OnSysCommand(UINT nID, LPARAM lParam)
HICON m_hIcon;
Golbals(全局)
theApp
CXXXApp是应用程序类,负责程序的启动和结束
CXXXDlg是主对话框类,程序的主界面。
(2)单文档(5个类):
1. CAboutDlg
2. CMainFram
3. 程序名App
4. 程序名Doc
5. 程序名View
CAboutDlg(“关于”对话框)
CAboutDlg()
DoDataExchange(CDataExchange* pDX)
CMainFrame(主框架类)
AssertValid()
CMainFrame()
~CMainFrame()
Dump(CDumpContext& dc)
OnCreate(LPCREATESTRUCT lpCreateStruct)
PreCreateWindow(CREATESTRUCT& cs)
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
CMyApp(应用程序类)
CMyApp()
InitInstance()
OnAppAbout()
CMyDoc(文档类)
AssertValid()
CMyDoc()
~CMyDoc()
Dump(CDumpContext& dc)
OnNewDocument()
Serialize(CArchive& ar)
CMyView(视图类)
AssertValid()
CMyView()
~CMyView()
Dump(CDumpContext& dc)
GetDocument()
OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
OnDraw(CDC* pDC)
OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
OnPreparePrinting(CPrintInfo* pInfo)
PreCreateWindow(CREATESTRUCT& cs)
Golbals(全局)
theApp
(3)多文档(6个类):
1. CAboutDlg
2. CMainFrame
3. 程序名App
4. 程序名Doc
5. 程序名View
6. CChildFrame
CAboutDlg(“关于”对话框)
CAboutDlg()
DoDataExchange(CDataExchange* pDX)
CChildFrame(子框架类)
AssertValid()
CChildFrame()
~CChildFrame()
Dump(CDumpContext& dc)
PreCreateWindow(CREATESTRUCT& cs)
CMainFrame(主框架类)
AssertValid()
CMainFrame()
~CMainFrame()
Dump(CDumpContext& dc)
OnCreate(LPCREATESTRUCT lpCreateStruct)
PreCreateWindow(CREATESTRUCT& cs)
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
CMyApp(应用程序类)
CMyApp()
InitInstance()
OnAppAbout()
CMyDoc(文档类)
AssertValid()
CMyDoc()
~CMyDoc()
Dump(CDumpContext& dc)
OnNewDocument()
Serialize(CArchive& ar)
CMyView(视图类)
AssertValid()
CMyView()
~CMyView()
Dump(CDumpContext& dc)
GetDocument()
OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
OnDraw(CDC* pDC)
OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
OnPreparePrinting(CPrintInfo* pInfo)
PreCreateWindow(CREATESTRUCT& cs)
Golbals(全局)
theApp
单文档程序打开多个文件会产生多个进程;
多文档程序打开多个文件只需一个进程。
单文档只能进行一份文档或图片的操作,就是你不能同时在一个程序打开两个文件
多文档可以用多个窗口显示不同的信息,进行不同的任务,有多个视图环境,可以同时操作多个文件
以基于对话框的MFC程序为例,程序入口函数为CXXXApp类的InitInstance()。在该函数中,创建一个CXXXDlg类对象实例并以模式对话框构造出来。