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

iBinary 2017-12-19 原文

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

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

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

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

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

 

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

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

按照MFC但文档的框架

1.封装WinMain

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

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

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

,MyWmain里面执行用户的InitInstance

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

添加的时候会遇到的问题

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

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

 

定义一个接口即可.

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

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

消息循环我们要添加到我们自己封装的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. MFC原理第六讲.消息传递

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

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

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

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

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

随机推荐

  1. 数据库SQL语句练习题10–18

    10.查询Score表中的最高分的学生学号和课程号。(子查询或者排序) select t.sno,t.cno […]...

  2. 网页性能优化

    网页性能优化 页面优化 页面优化可以提升页面的访问速度从而提高用户体验,优化的页面可以更好的提升 SEO 的效 […]...

  3. 核心交易系统架构演进 – 春哥大魔王

    核心交易系统架构演进 2019-02-19 13:20  春哥大魔王  阅读(4287)  评论(1)  编辑 […]...

  4. 淘宝 NPM 镜像

    这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽 […]...

  5. 分布式事务一致性实现的方式总结 – 编程一生

    分布式事务一致性实现的方式总结   因为最近项目正在做重构,而这次重构实质上比原来更接近于SOA化和微服务的思 […]...

  6. Apache Hadoop YARN

    一、架构与组件YARN核心思想是将资源管理和任务调度/监控等功能拆分成两个独立的守护进程。基于这个思想,设计了一个全局的资源管理器ResourceManager(RM)和为每个应用程序提供一个单应用程序控制器Application M...

  7. 《Java语言程序设计》编程练习8.9(游戏:#字游戏)

    8.9 (游戏:#字游戏)在并字游戏中,两个玩家使用各自的标志(一方用X则另一方就用O),轮流填写3× […]...

  8. 基于spring框架的redis缓存

    前言:redis使用的非常广泛,其优点是速度快、支持丰富的数据类型、支持事物操作等,适用于会话缓存(sessi […]...

展开目录

目录导航