当前位置: 首页 > news >正文

MFC-基础架构

前言

  • 各位师傅大家好,我是qmx_07,今天讲解MFC的基础架构
    在这里插入图片描述

概述

  • 介绍:MFC(Microsoft Foundation Classes)是微软公司提供的一个类库,用于在 Windows 操作系统下进行 C++ 应用程序开发
  • MFC把Windows SDK API函数包装成几百个类,MFC给Windows操作系统提供面向对象的接口,支持可重用性、自包含性以及其他OPP原则。MFC通过编写类来封装窗口、对话框等其他对象,引入关键的虚函数(覆盖虚函数可改变派生类的功能)来完成,MFC设计者使类库带来的总开销降到了最低
  • 本质在SDK的基础上进行了各种简单的封装,例如窗口类,字符串类等

MFC应用程序类型

  • MFC应用程序中的类至少包含一个CWinApp应用程序类和一个CFrameWnd窗口框架类

基于对话框的应用程序:这类程序适合于文档较少而交互操作较多的应用场合,如 Windows 自带的计算器程序。
单文档界面( SDI )应用程序:这类程序一次只能打开一个文档,如 Windows 自带的 Notepad 程序。
多文档界面( MDI )应用程序:这类程序可以同时打开多个文档并进行处理,处理的过程中很容易地进行切换,如 Microsoft Word 。

MFC框架

在这里插入图片描述
MFC类分为两类:

  • CObject基类的派生类,它们以层次结构的形式组织起来
  • 非 CObject 派生类,这些都是独立的类(表示点的 CPoint 类,表示矩形的 CRect 类)

应用程序结构类

  • 应用程序结构类主要是CCmdTarget类与它的派生类,CWinApp类,负责程序的执行流程
  • CCmdTarget类:MFC类库中消息映射体系的基类,继承于Cobject类,负责把消息命令传递给用户编写的消息响应函数,类似于SDK中的WM_COMMAND,如果需要处理消息,就从CCmdTarget派生一个类
  • CWinThread类:CWinThread类继承于CCmdTarget类,负责应用程序内部运行的线程,支持工作线程和用户界面线程,工作线程不能够发送、接收消息,通常用于后台运行用户界面线程能够发送和接收消息CWinAPP的派生类负责 程序的主线程
  • CWinApp类【应用程序类】:继承于CCmdTarget类,负责程序的初始化、运行及退出,在每一个MFC创建的应用程序中都包含CwinApp的派生类
  • CDocument类【文档类】: 继承于CCmdTarget类,提供了文档的基本功能,主要用于代表程序中的数据
  • CDocTemplate【文档模版类】:继承于CCmdTarget类,通过应用程序类的InitInstance函数来创建一或多个文档模版

窗口支持类

  • 包含windows应用程序中的可视元素,窗口,对话框,控件等。窗口支持类的所有类几乎都是Cwnd类派生的
  • CWnd类:继承于CCmdTarget类,提供了MFC中所有窗口类的基本功能,以及处理一些系统消息
  • CFrameWnd【框架窗口类】:继承于CWnd类,封装对各种框架窗口的操作
  • CView【视图窗口类】:继承于CWnd类,应用程序框架窗口中的子窗口,视图是用户与文档交互的媒介,用户可以在视图窗口内输入文本,绘图等
  • CDialog【对话框类】:继承于CWnd类,在屏幕上显示的对话框的基类。CDialog类对象是对话框模版与一个CDialog派生类的组合,通过使用对话框编辑器创建对话框并存入资源之中,然后为对话框创建一个CDialog派生类

安装MFC组件

在这里插入图片描述

  • 点击安装多个工具和功能

在这里插入图片描述

  • 选择用于X86和x64的mfc支持

创建MFC程序

在这里插入图片描述

  • 创建MFC应用程序
    在这里插入图片描述
  • 创建应用程序
    在这里插入图片描述
  • 创建成功

MFC创建弹窗按钮(认识和SDK的区别)

SDK:过程函数响应按钮消息,根据按钮ID确定功能函数
MFC:双击控件 编译器创建过程函数,编辑器会帮我们写以上代码
在这里插入图片描述

  • MFC中绘制图形
    在这里插入图片描述
  • 编辑器自动创建相应函数,替代了写WM_COMMAND的相应过程
  • 在MFC中 任何与句柄相关函数,都会被简化掉,比如上面的原函数内容是:MessageBox(句柄,内容,标题,响应内容)
    画面演示:
    在这里插入图片描述

总结

  • 介绍了MFC框架内容,SDK和MFC的区别,MFC创建视图 弹窗效果

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Redis——常用数据类型List
  • <<编码>> 第 16 章 存储器组织(1)--比特锁存器 示例电路
  • spark之不同序列化对比
  • 常用英语短语
  • vue3+element-plus icons图标选择组件封装
  • java集合之map
  • JAVA SE8
  • 基于 C语言的 Modbus RTU CRC 校验程序
  • 低代码平台后端搭建-阶段完结
  • 元学习的简单示例
  • 互联网应用安全
  • Arthas sysprop(查看和修改JVM的系统属性)
  • 双token无感刷新
  • Linux Vim编辑器常用命令
  • MySQL高阶1890-2020年最后一次登录
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 345-反转字符串中的元音字母
  • Android Volley源码解析
  • C++入门教程(10):for 语句
  • CentOS7 安装JDK
  • docker python 配置
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript 基本功--面试宝典
  • leetcode-27. Remove Element
  • MySQL数据库运维之数据恢复
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spark学习笔记之相关记录
  • XForms - 更强大的Form
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信开源mars源码分析1—上层samples分析
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • #100天计划# 2013年9月29日
  • #70结构体案例1(导师,学生,成绩)
  • #define
  • #Lua:Lua调用C++生成的DLL库
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)(1.13) SiK无线电高级配置(五)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (汇总)os模块以及shutil模块对文件的操作
  • (算法设计与分析)第一章算法概述-习题
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一) springboot详细介绍
  • (一)SpringBoot3---尚硅谷总结
  • (转)德国人的记事本
  • (转)人的集合论——移山之道
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ****三次握手和四次挥手
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core 6 redis操作类