框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)

iBinary 2017-12-19 原文

框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)

          框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)

一丶什么是框架,以及框架的作用

什么是框架?

  框架,简而言之就是把东西封装好了,使用框架开发可以快速开发程序,例如MFC程序的双击写代码.

为什么讲解框架原理

1.熟悉框架可以跟随时代脚步,因为框架万变不离其宗

2.熟悉框架,可以更快更好的逆向.

比如现在我们知道的QQ界面.

界面就是DUILIB框架写的.我们要通过逆向找到关键的内容必须熟悉框架.如果不熟悉框架,你就算会逆向也不知道从哪里入手.

 

二丶通过MFC但文档,理解其设计方式.

因为是第一讲,所以从头讲起.

MFC单文档框架其底层是封装的SDK的消息循环

首先我们要实现自己的框架,就要封装类了.怎么封装,或者说哪里比较困难?

1. API调用困难,所以封装

2. API参数多,所以封装.

3. 处理消息回调.

API调用困难,我们可以封装成一个类

处理消息回调.我们也可以封装成一个类,

既然封装成类,那么就要使用虚函数进行操作了.

1.首先封装WMain函数

2.每个类都要有一个公公的父类,这样可以添加公共接口.但是注意,一旦添加了就不好删除了.

 

三丶类代码设计.

根据MFC单文档框架可以得出继承关系图.

从最基础的框架看起,只有一个三个类

1.公共父类CObject  

2.消息处理类,CcmdTarGet  响应消息

  2.1 CWinThread    消息处理

  2.2 CWinApp     应用程序初始化,显示窗口

代码实现.

一丶实现类的关系图继承

首先按照继承关系图.添加类

父类 CMyObject  消息处理类CMycmdTarGet 消息回调类 CMyWinThread 应用程序初始化类  CMyWinApp

以及用户新建的类 CTestWinApp,前面几个类只是模拟MFC框架,自己定义的类,当我们用应用程序向导建立类的时候.则会生成自己的类(CTestWinApp)并且继承自CMyWinAPP

二丶封装WMain函数

按照MFC但文档的框架

1.封装WinMain

2.自己的WMain中执行初始化代码.初始化用户的全局对象

因为我们显示窗口或者注册窗口的时候,需要调用用户的InitInstance进行初始化.

所以用户的类定义为全局变量.

,MyWmain里面执行用户的InitInstance

3.用户的InITinstance里面执行注册窗口类,显示窗口类.

添加的时候会遇到的问题

1.窗口过程函数没有.这个需要封装,但是因为是第一讲,所以暂时不封装

2.实例句柄没有,这个时候我们需要保存一下实例句柄

 

定义一个接口即可.

注意: 窗口过程回调函数一定是要又默认的回调.不然不管你怎么注册窗口类,更新窗口类都会出错的.

现在我们的工程已经支持显示一个窗口了.但是并没有消息循环.

4.添加消息循环,响应消息

消息循环我们要添加到我们自己封装的Wmain中,当执行用户的Inininstance成功创建窗口的时候.

此时就该进行消息循环了.

4.1添加虚函数在消息类中.并实现

4,2 自己封装的wmain进行调用.

我们最基础的框架已经搭建完成.

 

完整代码下载:

链接:https://pan.baidu.com/s/1pKVViZp 密码:2rsz

 

发表于 2017-12-19 00:29 iBinary 阅读() 评论() 编辑 收藏

 

版权声明:本文为iBinary原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/iBinary/p/8060759.html

框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)的更多相关文章

  1. 数据可视化 — eCharts 框架原理 – *奋斗*

    数据可视化 — eCharts 框架原理 2019-06-26 09:46  *奋斗*  阅读(4 […]...

  2. 数据可视化 — eCharts 框架原理 – *奋斗*

    数据可视化 — eCharts 框架原理 2019-06-26 09:46  *奋斗*  阅读(4 […]...

  3. MFC原理第六讲.消息传递

    MFC原理第六讲.消息传递 —恢复内容开始—                   MF […]...

随机推荐

  1. 6.python变量 – python基础入门

        何为python变量,即数据类型。python变量一共六种类型:整数/浮点数/字符串/BOOL/列表/ […]...

  2. ubuntu中文界面改成英文界面

    https://blog.csdn.net/qq_29985391/article/details/78008 […]...

  3. 软件工程之系统建模篇【设计动态模型】

     本章介绍动态模型的设计过程,系统实例的动态模型用序列图来描述,首先介绍选择序列图的理由,最后分别设计各个用例 […]...

  4. 影院售票系统—–一个让你有成就感的小项目,只有一丢丢哦

    先来点废话,刚拿到这个项目的时候你是怎么想的,上来就闷头写,还是构想思路……   项目 […]...

  5. 三角形、长方形、正方形、梯形、圆等的周长计算公式和面积计算公式

    參考:http://iask.sina.com.cn/b/9499520.html 三角形、长方形、正方形、梯 […]...

  6. Jmeter性能测试配置

    目录 Jmeter检查点/断言 Jmeter事务 Jmeter集合点 Jmeter参数化 Jmeter检查点/ […]...

  7. 如何将目录下的脚本一次性全部执行

    大家好,我是良许。 我们在平时工作的时候,为了测试产品的一些功能,我们会写一系列的脚本,并且把它们放在同一个目 […]...

  8. JSON的三种解析方式

    一、什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧 […]...

展开目录

目录导航