框架原理第一讲,熟悉常用的设计方式.(以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. 2017 ICPC 广西邀请赛1005 CS Course

    CS Course Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. Windows Message Queue

    Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  3. 暑假练习赛 006 E Vanya and Label(数学)

    Vanya and LabelCrawling in process... Crawling failed Time Limit:1000MS     Memory Limit:262144KB    ...

  4. HTML中动态生成内容的事件绑定问题【转载】

    转自 http://www.hitoy.org/event-binding-problem-of-dynamically-generated-content.html 由于实际的需要,有时需要往网页中 ...

  5. 让普通 Java 类自动感知 Activity Lifecycle

    背景 在 Android 开发中,我们都很熟悉 Activity 的 Lifecycle,并且会在特定的 Lifecycle 下执行特定的操作.当然,我们清楚 Lifecycle 本身是带有 Andr ...

  6. 玩转 HTML5 下 WebGL 的 3D 模型交并补

    建设性的立体几何具有许多实际用途,它用于需要简单几何对象的情况下,或者数学精度很重要的地方,几乎所有的工程 CAD 软件包都使用 CSG(可以用于表示刀具切削,以及零件必须配合在一起的特征).CSG ...

  7. Postman参数化使用以及中文乱码问题解决

    1.参数化详解 准备工作,数据准备 2.使用csv文件时中文乱码可以通过使用txt文本,json文本改变调用json文件改变文件的编码格式解决 3:参数化数据调用的两种方式通过调用读取文件传入环境变量 ...

  8. day2--计算机基础

    一.服务器 1u服务器,1u=4.45cm 戴尔服务器种类: 电脑主机组成 主板.CPU.内存.硬盘.显卡.声卡等等. 运维关注三大部件:CPU.内存.硬盘(Disk) 电源,考虑使用双电服务器,电源 ...

  9. css伪类的说明以及使用(css事件)

    CSS伪类的使用(css事件) 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7670959.html 之前有开发开发App的时候,有同事问我那个列表的条目按下 ...

  10. 《天书夜读:从汇编语言到windows内核编程》三 练习反汇编C语言程序

    1) Debug版本算法反汇编,现有如下3×3矩阵相乘的程序: #define SIZE 3 int MyFunction(int a[SIZE][SIZE],int b[SIZE][SIZE],in ...