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

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创建视图 弹窗效果

http://www.kler.cn/a/320524.html

相关文章:

  • uniapp微信小程序转发跳转指定页面
  • 极速入门数模电路
  • 重构Action-cli前端脚手架
  • 无人机在森林中的应用!
  • WebAssembly在桌面级应用开发中的探索与实践
  • 如何轻松导出所有 WordPress URL 为纯文本格式
  • 实验二十:ds1302时钟实验
  • 【MYSQL】聚合查询、分组查询、联合查询
  • CSS开发全攻略
  • 后端开发面试题7(附答案)
  • 概率论与数理统计复习笔记
  • 本地电脑基于nginx的https单向认证和双向认证(自制证书+nginx配置)保姆级
  • 一天认识一个硬件之鼠标
  • web前端(本地存储问题超过5MB不继续保存解决办法)
  • Leetcode 378. 有序矩阵中第 K 小的元素
  • TypeScript 设计模式之【建造者模式】
  • 基于python+spark的外卖餐饮数据分析系统设计与实现(含论文)-Spark毕业设计选题推荐
  • Ansible-template模块动态生成特定文件
  • Spring Boot 整合MyBatis-Plus 实现多层次树结构的异步加载功能
  • 【MATLAB源码-第176期】基于matlab的16QAM调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。
  • 力扣(leetcode)每日一题 2306 公司命名
  • Redis数据持久化总结笔记
  • 中国蚁剑(antSword)安装使用
  • Vue.js与Flask/Django后端配合:构建高效Web应用
  • 解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!
  • c++基础部分