zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    RE最全面的正则表达式----字符验证
    Ajax tips(my_jquery_function.js)
    Python 分布式执行测试用例
    Python black + flake8 自动化规范代码
    JavaScript学习笔记-ES5
    pytest-assume 测试用例某一断言失败继续执行后面的代码
    pytest常用命令行
    [pretty_errors] Prettifies Python exception output to make it legible
    requests-html
    Python 类 继承与重写
  • 原文地址:https://www.cnblogs.com/iBinary/p/9628907.html
Copyright © 2011-2022 走看看