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)中的代码跟踪程序结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值