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();
代码部分截图:
代码会上传到网盘中.