框架原理第一讲,熟悉常用的设计方式.(以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

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

  1. 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)

    框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...

  2. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)

    框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解) 通过昨天的讲解,我们已经理解了运行时类型识别是什么. 比如  CObject * pthis = (Cobject *)Cre ...

  3. 逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构

    逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打 ...

  4. 逆向知识第一讲,IDA的熟悉使用

    逆向知识第一讲,IDA的熟悉使用 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打开. 1.提示使用什么格 ...

  5. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  6. 决胜Flutter 第一章 熟悉战场

    欢迎参加“决胜Flutter” 实训课程,这里是你此次实训之旅的起点. 本章将带您快速了解移动开发的现状,然后向您介绍Flutter的发展历史以及优势特点,最后一起动手,搭建高效的开发环境. 由于Fl ...

  7. 第17讲- UI常用组件之ImageView图片浏览

    第17讲 UI常用组件之ImageView图片浏览 二.图片浏览ImageView ImageView就是一个用来显示图片的视图: ImageView常见属性 常见属性 对应方法 说明 android ...

  8. python学习第一讲,python简介

    目录 python学习第一讲,python简介 一丶python简介 1.解释型语言与编译型语言 2.python的特点 3.python的优缺点 二丶第一个python程序 1.python源程序概 ...

  9. MFC原理第一讲.MFC的本质.以及手工编写MFC的程序

    MFC原理第一讲.MFC的本质.以及手工编写MFC的程序 PS: 这个博客属于复习知识.从头开始讲解. 在写这篇博客之前.已经写了3篇MFC的本质了.不过掌握知识点太多.所以从简重新开始. 一丶MFC ...

随机推荐

  1. java中的缓冲流BufferedWriter和BufferedReader

    java中的缓冲流有BufferedWriter和BufferedReader 在java api 手册中这样说缓冲流: 从字符输入流中读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取.可以指 ...

  2. 安装Windows Azure Powershell

    本文将介绍如何安装Windows Azure Powershell 1.打开Azure官方链接:https://www.azure.cn/downloads/ 2.按照向导进行安装 3.打开系统自带的 ...

  3. javascript中自定义事件

    自定义事件:用户可以指定事件类型,这个类型实际上就是一个字符串,然后为这个类型的事件指定事件处理函数,可以注册多个事件处理函数(用数组管理),调用时,从多个事件处理函数中找到再调用. function ...

  4. NHibernate Criteria中 Restriction与Expression的差别

    http://stackoverflow.com/questions/5483393/nhibernate-criteria-restriction-vs-expression 据说是Restrict ...

  5. 运放的PID电路

    PID就是(比例(proportion).积分(integral).导数(derivative)),在工程实际中,应用最为广泛的调节器控制规律为比例.积分.微分控制,简称PID控制,又称PID调节. ...

  6. 【Kafka源码】KafkaConsumer

    [TOC] KafkaConsumer是从kafka集群消费消息的客户端.这是kafka的高级消费者,而SimpleConsumer是kafka的低级消费者.何为高级?何为低级? 我们所谓的高级,就是 ...

  7. [转载] Hive结构

    转载自http://www.csdn.net/article/2010-11-28/282616 Hive 体系结构 Hive 的结构如图所示 主要分为以下几个部分: 用户接口,包括 CLI,Clie ...

  8. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  9. 最全的iOS数据存储方法

    目的 项目准备运用的Core Data进行本地数据存储,本来打算只写一下Core Data的,不过既然说到了数据存储,干脆来个数据存储基础大总结!本文将对以下几个模块进行叙述. 沙盒 Plist Pr ...

  10. npm -v;报错 cannot find module "wrapp"

    1.node -v正常.npm-v就报错.. 说明:在官网上下载了安装了好几次.一用到npm就报这个错.园友们,我不太懂node,你们遇到这个问题怎么解决的? 2.报错 cannot find mod ...