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

  • 相关阅读:
    pyspark读取parquet数据
    python求时间差
    pandas索引操作之loc,iloc,ix等方法
    pandas的concat和drop函数
    mysql语句的书写顺序和执行顺序
    hive的lower,upper,length,concat,lpad,rpad,cast,split函数简述
    hive的floor函数,ceil函数,round函数
    Pandas建立空的dataframe和cumsum累加函数
    Python基础笔记二之求序列均值、标准差、中位数、分位数
    NAT实验
  • 原文地址:https://www.cnblogs.com/iBinary/p/9628907.html
Copyright © 2011-2022 走看看