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应用程序就完成了启动过程,等待着用户的交互或者输入。
MFC中SDI程序创建流程的回顾的更多相关文章
- MFC中 SDI/MDI框架各部分指针获取方式
VC MFC SDI/MDI框架各部分指针获取方式 整理总结一下,希望能帮助到别人. 获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CV ...
- MFC中修改程序图标
在使用MFC时,我们经常需要修改我们得到的exe文件的图标.如:写一个随机画圆的小程序,我们就希望该程序的图标是个圆或者是和圆有关的图标.所以,在这里我就记录一下我修改图标的步骤. 顺便提一下,我使用 ...
- 使用MFC中的AfxBeginThread创建多线程
创建一个基于对话框的工程,工程名为CreateThreadRect 在CreateThreadRect.cpp中增加一个ThreadProc函数,代码如下 工作者线程的函数必须是全局函数或静态 ...
- MFC中关于子进程创建和关闭操作
创建子进程 PROCESS_INFORMATION ProcessInfo; STARTUPINFO StartupInfo; //This is an [in] parameter ZeroMemo ...
- VC/MFC中为程序定义全局快捷键
VC 2010-05-01 18:01:34 阅读287 评论0 字号:大中小 订阅 1.注册快捷键 在初始化函数,如OnInitDialog() 注册快捷键,代码如下: #define HotKey ...
- 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 ...
- MFC中 创建基于CFormView的文档视图程序
在MFC中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
- 问题解决——MFC SDI程序 CFormView中控件随窗口缩放
从来都是做对话框程序,这次想做个SDI的程序,想着用一下带Robbin界面的office2007风格,就不用使用那些花钱的商业控件/UI库了. 如果你不想看我打的文字,可以直接拷走代码,自己声明上定义 ...
随机推荐
- 用C++如何实现开放API接口服务器
比如新浪微博的API服务器.接口是使用HTTP请求.服务器端如何实现一个HTTP SERVER呢?使用libcurl可以吗? c++的话,一般用libevent或则libev这种库来实现吧.当然如果对 ...
- GDB调试之core文件(如何定位到Segment fault)
core dump又叫核心转储,当程序运行过程中发生异常,程序异常退出时,由操作系统把程序当前的内存状况存储在一个core文件中,叫core dump.(内部实现是:linux系统中内存越界会收到SI ...
- HDU1171:Big Event in HDU(多重背包分析)
通过分析,要使A>=B并且差值最小.所以只要使sum/2的容量下,B最大就Ok了 #include<iostream> #include<cstdio> #include ...
- string s = HttpContext.Current.Server.MapPath("");
string s = HttpContext.Current.Server.MapPath(""); 获取当前文件夹路径 而后用相对路径读取图片
- Android应用开发基础篇(5)-----Handler与多线程
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/19/2358155.html 一.概述 Handler这个类主要用来发送和处理消息的.它有多个发 ...
- Mybatis学习之JDBC缺陷
1.JDBC存在的问题 1.将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决?(将sql单独 配置在配置文件中) 2.数据库连接 ...
- Maven Spring JUnit 在Maven Clean Install时报
问题: Maven Clean Install时, 遇到报错package org.junit does not exist 明显, Unit Test在Compile阶段就被检查了. 而POM.xm ...
- JS数组方法总结
数组的常用方法总结 不改变原数组 1.Array.length; //获取数组长度 2.Array.join(); ...
- c 语言 指针 与地址
1.如何实现交换两个数的值 void swap( int *a,int *b) { int tep=*a;//*a其实就是主函数a的值,a是主函数存a数值的地址. *a =*b; *b =tep; ...
- php 实现简单的登录
//登录页面: V层前端模板: Administrator@QCEE61NZ66FEX2D /cygdrive/c/wamp/www/thinkphp/Home/Tpl/Login $ ls inde ...