您的位置:首页 > 其它

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)中的代码跟踪程序结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息