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应用程序就完成了启动过程,等待着用户的交互或者输入。

MFC中SDI程序创建流程的回顾的更多相关文章

  1. MFC中 SDI/MDI框架各部分指针获取方式

    VC MFC SDI/MDI框架各部分指针获取方式   整理总结一下,希望能帮助到别人.   获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CV ...

  2. MFC中修改程序图标

    在使用MFC时,我们经常需要修改我们得到的exe文件的图标.如:写一个随机画圆的小程序,我们就希望该程序的图标是个圆或者是和圆有关的图标.所以,在这里我就记录一下我修改图标的步骤. 顺便提一下,我使用 ...

  3. 使用MFC中的AfxBeginThread创建多线程

    创建一个基于对话框的工程,工程名为CreateThreadRect   在CreateThreadRect.cpp中增加一个ThreadProc函数,代码如下   工作者线程的函数必须是全局函数或静态 ...

  4. MFC中关于子进程创建和关闭操作

    创建子进程 PROCESS_INFORMATION ProcessInfo; STARTUPINFO StartupInfo; //This is an [in] parameter ZeroMemo ...

  5. VC/MFC中为程序定义全局快捷键

    VC 2010-05-01 18:01:34 阅读287 评论0 字号:大中小 订阅 1.注册快捷键 在初始化函数,如OnInitDialog() 注册快捷键,代码如下: #define HotKey ...

  6. OpenStack Nova虚拟机创建流程解析

    https://yikun.github.io/2017/09/27/OpenStack-Nova%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%9B%E5%BB%BA%E6%B5 ...

  7. MFC中 创建基于CFormView的文档视图程序

    在MFC中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...

  8. C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...

  9. 问题解决——MFC SDI程序 CFormView中控件随窗口缩放

    从来都是做对话框程序,这次想做个SDI的程序,想着用一下带Robbin界面的office2007风格,就不用使用那些花钱的商业控件/UI库了. 如果你不想看我打的文字,可以直接拷走代码,自己声明上定义 ...

随机推荐

  1. js中if的简写方法

    http://transitions1020.com/# 太帅! <script type="text/javascript"> 如果你想写 if (!false) { ...

  2. C#中“走马灯”和类似“打地鼠”的小程序(Seventeenth Day)

    今天主要复习了一下昨天学习的窗体小程序.主要会运用到控件的一些基本属性. 程序: 走马灯(要求是:使用两个窗体,两个窗体之间要传值,Form1传值给Form2,传入的字符串在Form2窗体上横向滚动) ...

  3. The Painter's Partition Problem Part I

    (http://leetcode.com/2011/04/the-painters-partition-problem.html) You have to paint N boards of leng ...

  4. hadoop 主节点存储告警

    之前只他调整过dfs 的存储目录到最大配额的目录,其它没有处理(就是在默认的/ 目录下,而这个目录的存储配额只有50G) 运行一周的时间不到,集群开始告警,查看是目录/ 的存储占用超过了60% 再查看 ...

  5. html5 geolocation API

    清单 1. 检查浏览器支持性if (navigator.geolocation) 清单 2. 单次定位请求 API void getCurrentPosition(updateLocation, op ...

  6. jquery回调函数callback的使用

    回调函数必须是全局函数或者静态函数,不可定义为某个特定的类的成员函数 callback函数在当前动画100%完成之后执行 $("p").hide(1000); alert(&quo ...

  7. Struts2中获取HttpServletRequest,HttpSession等的几种方式

    转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...

  8. R语言学习之主成分分析法的R实践

    主成分分析R软件实现程序(一): >d=read.table("clipboard",header=T) #从剪贴板读取数据 >sd=scale(d)  #对数据进行标 ...

  9. Ubuntu 12.04中文输入法的安装(转)

    Ubuntu上的输入法主要有小小输入平台(支持拼音/二笔/五笔等),Fcitx,Ibus,Scim等.其中Scim和Ibus是输入法框架. 在Ubuntu的中文系统中自带了中文输入法,通过Ctrl+S ...

  10. Myeclipse安装Activiti

    1.将压缩包内activiti文件夹放入Myeclipse\dropins文件夹内并修改activiti文件夹内Link文件指向自己的目录重启Myeclipse(这时打开bpmn文件仍会报错).2.将 ...