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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏风中追风

分布式进阶__如何用zookeeper 实现分布式锁

        分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。

40116
来自专栏破晓之歌

在React中使用Redux数据流(讲解比较清晰,差代码)

index.html-模板,server.js-构建跑项目,webpack-打包项目

852
来自专栏Python

python文件和目录操作方法大全

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.get...

2926
来自专栏python3

python标准库--logging模块

它们的值为0-50(也可以自定义级别),这些级别的用处是,先将自己的日志定一个级别,logging模块发出的信息级别高于定义的级别,将在标准输出(屏幕)显示出来...

901
来自专栏州的先生

如何提高爬虫效率?Python下简单的进程、线程效率对比

2416
来自专栏Python小屋

使用Python读写文本文件内容

本文主要演示如何读写文本文件的内容,以及上下文管理语句with的用法。使用上下文管理语句with时,即使在操作文件内容时引发异常也能保证文件被正确关闭。 #'w...

2625
来自专栏IT派

Python 的异步 IO:Asyncio 简介

所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知。

1153
来自专栏从流域到海域

Python Windows下分布式进程的坑(分布式进程的一个简单例子)

下面这个例子基于”廖雪峰的Python教程:分布式进程”原例在Linux上运行,直接在Windows上运行会出现错误,下面是针对原例进行的改进,使之能成功...

3665
来自专栏北京马哥教育

大神带你 20 分钟学会 Ansible !

4992
来自专栏大内老A

WCF服务端运行时架构体系详解[下篇]

作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象。站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象。如果站在W...

2047

扫码关注云+社区

领取腾讯云代金券