前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MFC原理第二讲.MFC的初始化过程

MFC原理第二讲.MFC的初始化过程

作者头像
IBinary
发布2019-05-25 16:23:50
1.1K0
发布2019-05-25 16:23:50
举报
文章被收录于专栏:逆向技术

    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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •     MFC原理第二讲MFC的初始化过程
    • 一丶简介
      • 二丶Winmain查找.
        • 三丶MFC的初始化过程之theApp为什么全局.
          • 四丶MFC初始化过程代码编写
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档