MFC中SDI程序创建流程的回顾

SDI程序创建流程的回顾 

从CWinApp.InitialInstance()开始,
1.首先应用程序对象创建文档模板;
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSDICoinDoc),
RUNTIME_CLASS(CMainFrame),       // main SDI frame window
RUNTIME_CLASS(CSDICoinView));
2.文档模板创建文档对象、打开或创建文件;
CCommandLineInfo cmdInfo;  //处理命令行信息类
    enum { FileNew, FileOpen, FilePrint, FilePrintTo, FileDDE,AppUnregister, FileNothing = -1 } nShellCommand;  //7种动作类型


    CCommandLineInfo::CCommandLineInfo()  //CCommandLineInfo类的默认构造函数
   {
m_bShowSplash = TRUE;
m_bRunEmbedded = FALSE;
m_bRunAutomated = FALSE;
m_nShellCommand = FileNew;//指定了SHELL命令操作(默认动作)
    }   

ParseCommandLine(cmdInfo);  //根据上面的nShellCommand值,调用CWinApp::ProcessShellCommand()执行相应的动作
      FILENEW--->OnFileNew();
      FILEOPEN--->OpenDocumentFile();
      FilePrint, FilePrintTo--->......  
      FileDDE--->...
      AppUnregister--->...
      ....


3.文档模板创建边框窗口对象和边框窗口;
4.接着边框窗口对象创建视对象和视窗口。


 下面以FILENEW动作为例,详解创建过程:
  a.调用文档模板管理器的成员函数OnFileNew(m_pDocManager->OnFileNew());
  b.模板管理器获取文档模板对象指针,调用文档模板对象的OpenDocumentFile 函数(pTemplate->OpenDocumentFile(NULL))。
  c.如果模板管理器发现有多个文档模板,就弹出一个对话框让用户选择文档模板。
  d.CSingleDocTemplate::OpenDocumentFile();
     //创建文档类
    CDocument* pDocument = CreateNewDocument();
    //创建框架类
    CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL);
  e.调用CFrameWnd的虚拟函数InitialUpdateFrame完成窗口初始化;


这些创建是以应用程序的文档模板为中心进行的。在创建这些MFC对象的同时,建立了它们之间的关系。创建这些之后,进行初始化,激活主边框窗口,把边框窗口、视窗口显示出来。

这样,一个SDI应用程序就完成了启动过程,等待着用户的交互或者输入。

posted on 2013-08-14 19:17  you Richer  阅读(600)  评论(0编辑  收藏  举报