MFC原理第二讲.MFC的初始化过程
MFC原理第二讲MFC的初始化过程
一丶简介
通过上一讲.我们手工模拟了一个MFC程序. 但是上一讲留下了疑问. 就是WinMain在哪.以及消息处理在哪里.
这一节主要就是讲解Winmain在哪里. 以及为什么全局应用程序对象要初始化. 也就是我们的theApp这个变量.
也就是MFC的初始化过程.
二丶Winmain查找.
我们上一讲模拟了MFC程序.要查找winmain很简单.
1.调试启动. F10快捷键. 这样直接定位到Winmain
2.因为我们的InitInstance调用.我们可以下段点.然后栈回朔可以看到上一层也就是winmain调用的一层.
第一种方法.

第二种方法:

因为MFC框架太大.现在不利于我们直接看MFC源码学习.所以我们要从最简单的模拟开始.
三丶MFC的初始化过程之theApp为什么全局.
因为theApp是应用程序对象.会广泛使用.定义为全局则是在Winmain之前已经初始化好了. 但是我们要模拟这个过程.则要熟悉CWinApp的类层级结构图.以及CFrameWnd的结构图
我们可以MSDN查看一下.


经过上图可以看出. 最顶层的类都是Cobject 第二个则是 CCmdTarGet类.
所以我们要先模拟CWinApp的继承结构. 这里主要就是加类.然后提供构造跟析构了.

因为关键字保留了.所以都加上了My做前缀.
应用程序截图:

所以说.TheApp应用对象数据在main之后经常使用.所以必须编写.
四丶MFC初始化过程代码编写
上面我们已经将该有的类.该继承的类已经写好了.现在我们就可以写自己的类模拟了.
1.首先需要InitInstance这个虚函数. 这个虚函数看MFC源码是放在 CWindThread类中. 所以我们也定义一个.放在我们的CMyWinThread中.
2.还需要一个 m_pMainWnd指针.来保存用户创建的窗口句柄.所以我们也定义一个. MFC中也是放在CWinThread类中.所以我们放到我们的里面. 但是要包含我们写的CMyWnd类.因为指针的类型是CWnd *
而这个类我们也定义了.
3.我们的WinApp 实现initInstance 并且添加一个 WinApp * m_pCurApp指针. 实现initstance不说了.第一讲已经看到了. 为什么还需要第二个 m_pCurApp指针.原因是 MFC在调用的时候.不能直接使用
theApp. 而是通过一个函数 AfxGetTheApp来获取的. 所以我们定义的指针.在构造里面初始化即可. 然后写一个实现函数. 返回 theapp.m_pCurApp指针.
4.实现我们的Create();
代码部分截图:

代码会上传到网盘中.
链接:https://pan.baidu.com/s/1ZSWU__j8OMLLyLJZOnI9hA 密码:pt5s
MFC原理第二讲.MFC的初始化过程的更多相关文章
- MFC原理第一讲.MFC的本质.以及手工编写MFC的程序
MFC原理第一讲.MFC的本质.以及手工编写MFC的程序 PS: 这个博客属于复习知识.从头开始讲解. 在写这篇博客之前.已经写了3篇MFC的本质了.不过掌握知识点太多.所以从简重新开始. 一丶MFC ...
- PC逆向之代码还原技术,第六讲汇编中除法代码还原以及原理第二讲,被除数是正数 除数非2的幂
目录 一丶简介 二丶代码还原讲解 1.被除数无符号 除数非2的幂 2.被除数无符号 除数为特例7 三丶代码还原总结 一丶简介 上一篇博客说的除2的幂. 如果被除数是有符号的,那么会进行调整,并使用位操 ...
- Spring框架系列(13) - SpringMVC实现原理之DispatcherServlet的初始化过程
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet ...
- Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程
上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...
- Spring框架系列(14) - SpringMVC实现原理之DispatcherServlet处理请求的过程
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet ...
- 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)
框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...
- MFC原理第六讲.消息传递
---恢复内容开始--- MFC原理第六讲.消息传递 一丶简介 通过上一讲我们的消息映射表.我们得知. 消息映射表 会保存父类的MessageMap 以及自己当前的消息结构体数组. 消息传递是一层一层 ...
- MFC原理第四讲.动态创建机制
MFC原理第四讲.动态创建机制 一丶要学习的知识点以及简介 动态创建是什么意思? 动态创建其实就是跟C++的new一样.都是创建对象.但是规避了C++语法的缺陷. 例如: char * ClassNa ...
- MFC原理第五讲.消息映射.以及如何添加消息
MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...
随机推荐
- C语言中结构体(struct)的几种初始化方法
转自https://www.jb51.net/article/91456.htm 本文给大家总结的struct数据有3种初始化方法 1.顺序 2.C风格的乱序 3.C++风格的乱序 下面通过示 ...
- 【转】mysqldump与innobackupex知多少
作者:罗小波 [目录] 1. 先看mysqldump 1.1 mysqldump备份过程解读 1.2 mysqldump备份过程中的关键步骤 1.2.1 FLUSH TABLES和FLUSH TABL ...
- HTML5开发和布局(待补充)
移动开发准则 1.尽量使用单页面开发(SPA) 2.慎选UI框架 3.动画.特效使用(60fps) **浏览器消耗最小的CSS属性** 位置:transform:translate(x,y,z) 大小 ...
- Missing initializer in const declaration
这是一个 JS 的报错. 如果你要声明一个常量,必须要赋初值.否则就会报错. 比如这样就可以触发这个报错: const foo; 或者 const bar = xxx; 等号右侧由于拼写失误导致的js ...
- noip第31课资料
- CentOS---zabbix使用sendEamil发送报警
一.sendEmail简介 sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php ...
- MFC中的一些视图
本章主要介绍MFC中主要的视图类,这些继承自Cview类. 继承关系如上图所示. 滚动视图 CscrollView给Cview添加了基本的滚动功能,它包含WM_VSCROLL和WM_HSCROLL消息 ...
- PB开发境界 多个DW进行update
多个DW进行update //菜鸟代码dw_1.Update()dw_2.Update()初级代码IF dw_1.Update() = 1 And dw_2.Update() = 1 THEN ...
- 下载安装配置Maven
下载安装Apache Maven 1.Maven官网下载jia包:http://maven.apache.org/download.cgi 2.将文件解压到D:\Program Files\apach ...
- unigui+fastReport实现web打印方案
近日单位需要用到会议通知单的打印功能,故引出篇. unigui是delphi环境下快速开发web应用的优秀工具,不再赘述,下面直接记录使用搭配使用,基本逻辑就是: unigui实现数据录入和浏览的we ...