Microsoft Windows MFC库应用的具体启动步骤(转)
2010-01-06 22:37
323 查看
Microsoft Windows MFC库应用的具体启动步骤(转)
Microsoft Windows MFC库应用的具体启动步骤
1. Windows将用户程序装入内存;
2. 构造全程对象theApp,在程序被装入时,所有全程对象都会立刻被创建;
3. Windows调用全程函数WinMain,它是类库的一部分;
4. WinMain会自动搜索CWinApp派生类的唯一实例;
5. 在找到后,WinMain会调用theApp的InitInstance函数,它在派生类中被重新设置了;
6. 被重新设置的InitInstance函数启动了文档的装入以主要框架和视的显示处理过程;
7. 然后,WinMain调用theApp的Run函数,它启动窗口消息和命令消息的传递处理过程;
当一个应用程序被中止,所有窗口被关闭后,ExitInstance函数会被自动调用。
------------------------------------------------------------------
CWinApp::OnFileOpen函数大概执行以下步骤:
1、提示用户选择文件;
2、选择一个匹配的文件模板;
3、创建文档、框架和视类;
4、打开文件;
5、将该文件和档案(CArchive)联系起来;
6、调用Serialize。
而OnFileNew不执行1、2、4、5几步,其他相同。具体的代码可以参考MFC/Src目录中的源程序。
如果你想实现OnFileOpen是为了读你自己定义的文件,一般不重载OnFileOpen,而是在Doc类的Serialize中写代码。如果不习惯
CArchive类,也可以直接重载OnOpenDocument(它是Serialize的父函数)。这方面的例子可以参考VC++的
diblook。
如果你只是想显示一个与众不同的选择文件的对话框,一般需要重载OnFileOpen。大致的步骤是:
void CYourApp::OnFileOpen()
CString newName;
if(!ShowYourDialog(newName))
return; // 显示你的对话框
OpenDocumentFile(newName);
}
你只需要实现ShowYourDialog(newName)就可以了。
----------------------------------------------------------
了解CwinApp::OnFileNew、CwinApp::OnFileOpen和Window/New的程序流程。
<1> CwinApp::OnFileNew和CwinApp::OnFileOpen函数的简单流程。
在CWinApp::OnFile/new 或CwinApp::OnFileOpen函数中,核心操作是CDocTemplate::OpenDocument函数。其函数原型为:
virtual CDocument* CDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE ) = 0;
图(4)中星号标注之后即是该函数的流程,简要介绍如下:
(1)、CDocTemplate::CreateNewDocument函数创建一个新文档,其类型与文档模板相关,并通过函数
CDocTemplate::AddDocument加入该文档模板的文档指针列表中。此时,文档类的构造函数被执行,程序可以在此进行文档的初始化。
(2)、函数CDocTemplate::CreateNewFrame调用MDI子窗口类(CMDIChildWnd)的构造函数,生成MDI子窗口
对象。接着调用CMDIChildWnd::PreCreateWindow。然后,生成一个CCreateContext对象,
(CcreateContext是MFC框架所使用的一种结构,它将构成文档和视的组件联系起来。后文将详细介绍之。)并将该对象值传给
CMDIChildWnd::OnCreateClient函数。MFC调用此函数,用CCreateContext对象提供的信息创建一个或多个
CView对象。此时,各视的构造函数被依次调用。
(3)、接着,判断lpszPathName是否为空。分为两种情况:
(a)、若为空,则表明要创建一个新文档:调用SetDefaultTitle函数装载文档的缺省标题,并显示在文档的标题栏中;然后执行
CDocument::OnNewDocument。该函数调用DeleteContents以保证文档为空,然后置新文档为清洁。可以重载该函数。
(b)、否则,表明要打开一个已存在的文档:调用CDocument::OnOpenDocument打开指定的文件;执行
DeleteContext,保证文档为空;调用CObject::Serialize读入该文件的内容。(程序员可在此进行文件的读入操作。当然,也可
以在
CDocument::OnOpenDocument中读入文件)。然后置文档为清洁;最后,调用CDocTemplate::SetPathName,
并把文件名加入到最近文件列表中。
(4)、调用CDocTemplate::InitialUpdateFrame函数,使框架窗口中的各个视收到OnInitialUpdate调用。
框架窗口的主视(子窗ID等于AFX_IDW_PANE_FIRST的视)被激活。程序员可以在此对视对象进行初始化。
<2> Window/New命令的程序流程
当主框架窗口上有子窗口时,选择Window/New命令可以生成该活动子窗口的影象。它们有相同的文档模板、相同的文档。其流程如下:
执行Window/New的过程与File/New的过程差不多。所不同的是,File/New须要创建一个新文档,而Window/New则是获得已存
在的MDI子窗口的文档。因此以前存在的视和New以后生成的视均为该文档的视,都是该文档的内容的显示。当调用
CDocument::UpdateAllViews函数时,它们(视)的OnUpdate函数都将被激活。此时,在该文档的视指针列表中,将有多于一个
的视(具体数目视Window/New执行的次数而定)。读者可以利用(图3)中的代码跟踪程序结果。
Microsoft Windows MFC库应用的具体启动步骤
1. Windows将用户程序装入内存;
2. 构造全程对象theApp,在程序被装入时,所有全程对象都会立刻被创建;
3. Windows调用全程函数WinMain,它是类库的一部分;
4. WinMain会自动搜索CWinApp派生类的唯一实例;
5. 在找到后,WinMain会调用theApp的InitInstance函数,它在派生类中被重新设置了;
6. 被重新设置的InitInstance函数启动了文档的装入以主要框架和视的显示处理过程;
7. 然后,WinMain调用theApp的Run函数,它启动窗口消息和命令消息的传递处理过程;
当一个应用程序被中止,所有窗口被关闭后,ExitInstance函数会被自动调用。
------------------------------------------------------------------
CWinApp::OnFileOpen函数大概执行以下步骤:
1、提示用户选择文件;
2、选择一个匹配的文件模板;
3、创建文档、框架和视类;
4、打开文件;
5、将该文件和档案(CArchive)联系起来;
6、调用Serialize。
而OnFileNew不执行1、2、4、5几步,其他相同。具体的代码可以参考MFC/Src目录中的源程序。
如果你想实现OnFileOpen是为了读你自己定义的文件,一般不重载OnFileOpen,而是在Doc类的Serialize中写代码。如果不习惯
CArchive类,也可以直接重载OnOpenDocument(它是Serialize的父函数)。这方面的例子可以参考VC++的
diblook。
如果你只是想显示一个与众不同的选择文件的对话框,一般需要重载OnFileOpen。大致的步骤是:
void CYourApp::OnFileOpen()
CString newName;
if(!ShowYourDialog(newName))
return; // 显示你的对话框
OpenDocumentFile(newName);
}
你只需要实现ShowYourDialog(newName)就可以了。
----------------------------------------------------------
了解CwinApp::OnFileNew、CwinApp::OnFileOpen和Window/New的程序流程。
<1> CwinApp::OnFileNew和CwinApp::OnFileOpen函数的简单流程。
在CWinApp::OnFile/new 或CwinApp::OnFileOpen函数中,核心操作是CDocTemplate::OpenDocument函数。其函数原型为:
virtual CDocument* CDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE ) = 0;
图(4)中星号标注之后即是该函数的流程,简要介绍如下:
(1)、CDocTemplate::CreateNewDocument函数创建一个新文档,其类型与文档模板相关,并通过函数
CDocTemplate::AddDocument加入该文档模板的文档指针列表中。此时,文档类的构造函数被执行,程序可以在此进行文档的初始化。
(2)、函数CDocTemplate::CreateNewFrame调用MDI子窗口类(CMDIChildWnd)的构造函数,生成MDI子窗口
对象。接着调用CMDIChildWnd::PreCreateWindow。然后,生成一个CCreateContext对象,
(CcreateContext是MFC框架所使用的一种结构,它将构成文档和视的组件联系起来。后文将详细介绍之。)并将该对象值传给
CMDIChildWnd::OnCreateClient函数。MFC调用此函数,用CCreateContext对象提供的信息创建一个或多个
CView对象。此时,各视的构造函数被依次调用。
(3)、接着,判断lpszPathName是否为空。分为两种情况:
(a)、若为空,则表明要创建一个新文档:调用SetDefaultTitle函数装载文档的缺省标题,并显示在文档的标题栏中;然后执行
CDocument::OnNewDocument。该函数调用DeleteContents以保证文档为空,然后置新文档为清洁。可以重载该函数。
(b)、否则,表明要打开一个已存在的文档:调用CDocument::OnOpenDocument打开指定的文件;执行
DeleteContext,保证文档为空;调用CObject::Serialize读入该文件的内容。(程序员可在此进行文件的读入操作。当然,也可
以在
CDocument::OnOpenDocument中读入文件)。然后置文档为清洁;最后,调用CDocTemplate::SetPathName,
并把文件名加入到最近文件列表中。
(4)、调用CDocTemplate::InitialUpdateFrame函数,使框架窗口中的各个视收到OnInitialUpdate调用。
框架窗口的主视(子窗ID等于AFX_IDW_PANE_FIRST的视)被激活。程序员可以在此对视对象进行初始化。
<2> Window/New命令的程序流程
当主框架窗口上有子窗口时,选择Window/New命令可以生成该活动子窗口的影象。它们有相同的文档模板、相同的文档。其流程如下:
执行Window/New的过程与File/New的过程差不多。所不同的是,File/New须要创建一个新文档,而Window/New则是获得已存
在的MDI子窗口的文档。因此以前存在的视和New以后生成的视均为该文档的视,都是该文档的内容的显示。当调用
CDocument::UpdateAllViews函数时,它们(视)的OnUpdate函数都将被激活。此时,在该文档的视指针列表中,将有多于一个
的视(具体数目视Window/New执行的次数而定)。读者可以利用(图3)中的代码跟踪程序结果。
相关文章推荐
- unity3d开发的android应用中加入AD系统的具体步骤
- win8怎么固定应用到Metro的开始屏幕具体步骤
- Windows 8中Hyper-V虚拟机操作应用的具体步骤
- windows下共用JDK环境,同时启动多个tomcat具体步骤
- heartbeat2.1.4 实现监控应用服务(httpd)具体步骤
- 晨枫u盘启动工具安装原版XP的具体步骤(图文)
- Android底层启动过程(应该说是应用进程init启动后的一些步骤)
- 数字签名的具体代码应用过程以及步骤
- windows8中关闭快速启动开机功能具体步骤(默认处于启用状态)
- unity3d开发的android应用中加入AD系统的具体步骤
- HBase的单节点集群详细启动步骤(分为Zookeeper自带还是外装)
- 深入了解Struts2返回JSON数据的原理及具体应用范例
- 在Rancher中添加为中国区优化的k8s应用商店的步骤和方法
- Android启动另一个应用(只需知道pa…
- 利用 Intellij IDEA 10 开发多工程Grails应用的关键步骤及注意事项(随笔)
- 微信公众平台-本地实时开发调试(具体步骤)
- (转)从android一个apk中启动第三方apk应用
- Struts2返回JSON数据的具体应用范例
- AngularDart4.0 英雄之旅-教程-02启动应用
- Ionic3 编程-应用启动进入引导页