MFC中的类继承图的基本框架

一、类继承关系

从图中可知,在MFC中大多数的类都派生于CObject类,它的主要作用是为子类提供一些基本的功能,这些派生类构成了MFC应用程序的基本框架,它们各自的功能描述如表1所示。

派生类

功能描述

CCmdTarget

用于处理用户请求

CWinThread

代表应用程序内部的执行线程

CWinApp

应用程序的核心

CWnd

为所有的窗口类提供基本的功能,处理常见的系统消息

CView

用于显示数据并与文档对象进行交互

CFrameWnd

应用程序的主框架

CDocument

包含应用程序的数据集

二、具体的功能

下面将对上述表中各个类的功能进行具体的讲解。

1)CCmdTarget类

CCmdTarget类是MFC的消息映射基础类,MFC为该类设计了许多的成员变量及函数以解决消息映射的问题。派生于CCmdTarget的类可用于处理当用户选择菜单或单击按钮等操作时所产生的Command消息。

在实际的开发过程中,我们通常很少直接从CCmdTarget中派生类。当想要生成一个处理按键消息的类时,只需从继承于CCmdTarget类的框架子类CView、CWinApp、CDocument、CWnd和CFrameWnd中选择一个来充当父类即可。

2)CWinThread类

CWinThread类是MFC中用于封装线程的类,它的成员函数可以使MFC应用程序创建和管理包括UI及工作者在内的线程。每个MFC应用程序都至少应该使用一个从CWinThread派生的类,应用程序类CWinApp就是一个代表。

3)CWinApp类

CWinApp类通常代表应用程序自己,它封装了应用程序的初始化、运行及终止的过程。基于框架的应用程序必须有且仅有一个派生于CWinApp的类的对象,并在完成窗口的创建工作之前执行对该对象的构造。

应用程序类的对象需要完成以下工作。

初始化应用程序。

建立文档模板结构。

循环检索消息队列中的消息并将这些消息发送到指定的地方。

执行应用程序退出时的清理工作。

4)CDocument类

CDocument类是在使用文档/视图结构的应用程序中文档对象的基类,它为应用程序的文档对象提供了基本的功能,包括新建、串行化数据等。

5)CWnd类

CWnd类是所有MFC 窗口的基类,它封装了窗口的基本操作,包括窗口的创建、销毁、设置窗口风格等,以及窗口对大部分消息的默认响应。开发人员可以直接从CWnd派生其他类,但通常情况下我们并不这么做,而是通过继承CWnd的派生类生成新类。

6)CFrameWnd类

CFrameWnd类往往用于创建应用程序的主窗口,并定义了大量管理视图和文档对象的成员函数及变量。在编写文档/视图结构的应用程序时,视图对象等将作为CFrameWnd的子窗口实现对客户区的共享,并被CFrameWnd有序排列。

7)CView类

CView类是在使用文档/视图结构的应用程序中视图对象的基类,它是用户的主要操作界面。在应用程序中,一个视图对象通常只对应一个文档对象,但一个文档对象却可以关联多个视图对象,并且每个视图对象都以不同的形式来显示文档中的数据。

在上述CObject类的派生类中,CWinApp类、CDocument类、 CCmdTarget类及CWinThread类构成了应用程序的结构类,代表了应用程序的基本结构元素。换句话说,当一个应用程序开始运行时,这些类将最先实现初始化。

在类的层次结构中,应用程序类CWinApp是一个基于MFC应用程序的最外层对象容器,它不仅拥有诸如实例句柄等需要被传送到WinMain()函数中去的参数,还包含了应用程序的主框架窗口,当主框架窗口被关闭时,应用程序也就跟着结束了。因此,开发人员必须为程序创建一个全局的应用程序对象。

参考:

https://www.cnblogs.com/shuzhongke/p/15439957.html

MFC文档视图框架(各个类之间的关系)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python list列表删除元素(4种方法)

在 Python列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法;根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法&#xf…

Pytest系列-数据驱动@pytest.mark.parametrize(7)

简介 unittest 和 pytest参数化对比: pytest与unittest的一个重要区别就是参数化,unittest框架使用的第三方库ddt来参数化的 而pytest框架: 前置/后置处理函数fixture,它有个参数params专门与request结合使用来传递参数&#x…

CLIP 基础模型:从自然语言监督中学习可转移的视觉模型

一、说明 在本文中,我们将介绍CLIP背后的论文(Contrastive Language-I mage Pre-Training)。我们将提取关键概念并分解它们以使其易于理解。此外,还对图像和数据图表进行了注释以澄清疑问。 图片来源: 论文&#xff1a…

Layui + Flask | 实现注册、登录功能(案例篇)(08)

此案例内容比较多,建议滑到最后点击阅读原文,阅读体验更佳。后续也会录制案例视频,将在本周内上传到同名的 b 站账号。 已经看了 layui 表单相关的知识,接下来就可以实现注册功能,功能逻辑如下: 项目创建 新建 flask 项目下载 layui 文件,解压之后复制到指定文件编写前…

前缀和实例4(和可被k整除的子数组)

题目: 给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续、非空) 子数组 的数目。 子数组 是数组的 连续 部分。 示例 1: 输入:nums [4,5,0,-2,-3,1], k 5 输出:7 …

系统性能调优:提升服务器响应速度

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

95.qt qml-诺谦通用可扩展多功能QML界面

支持如下所示: 1.可扩展多功能交互,用户可以根据自己喜欢使用常用功能,针对多功能项目非常有用!2.登录用户信息显示,历史消息显示,皮肤黑白风格切换 如下图所示: 自带一个功能界面,可以通过功能界面添加不…

第十三章总结

一.泛型 1.定义泛型类 泛型机制语法&#xff1a; 类名<T> 其中&#xff0c;T是泛型的名称&#xff0c;代表某一种类型。 【例13.6】创建带泛型的图书类 代码&#xff1a; 结果&#xff1a; 2.泛型的常规用法 (1)定义泛型类时声明多个变量 class MyCla…

算法通过村第八关-树(深度优先)青铜笔记|经典算法题目

文章目录 前言1. 二叉树里面的双指针1.1 判断两棵树是否相同1.2 对称二叉树1.3 合并二叉树 2. 路径专题2.1 二叉树的所有路径2.2 路径总和 3. 翻转的妙用总结 前言 提示&#xff1a;人类的底里是悲伤&#xff0c;我们都在用厚重的颜料&#xff0c;覆盖那些粗糙的线稿。--张皓宸…

ros2学习笔记:shell环境变量脚本setup.bash[-z][-n][-f]参数作用

-n作用 [ -n 字符串 ] or [ 字符串 ] 字符串的长度为非零&#xff08;有内容&#xff09;则为真。加-n与不加-n结果相同。 -z作用 [ -z 字符串 ] 字符串的长度为零则为真。 字符串为空即NULL时为真&#xff0c;与上面的-n相反。 -f作用 [ -f FILE ] 如果 FILE 存在且是一…

【C语言】指针和数组笔试题解析(2)

【C语言】指针和数组笔试题解析&#xff08;1&#xff09;&#xff0c; 这是第一篇关于sizeof与strlen在指针中的应用&#xff0c;而这一篇主要讲解在各种情形下的灵活运用&#xff0c;也是大厂中经典的面试题 第一题&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };in…

uniapp 触底加载

方式一 onReachBottomDistance 缺点&#xff1a;需要整个页面滑动&#xff0c;局部滑动触发不了 { // pages.json // 路由下增加 onReachBottomDistance "path": "detailed/detailed","style": {"navigationBarTitleText": "收…

【无公网IP内网穿透】Windows搭建Web站点

什么是cpolar&#xff1f; cpolar是一个非常强大的内网穿透工具&#xff0c;开发调试的必备利器。 它可以将本地内网服务器的HTTP、HTTPS、TCP协议端口映射为公网地址端口&#xff0c;使得公网用户可以轻松访问您的内网服务器&#xff0c;无需部署至公网服务器。支持永久免费使…

idea 无法识别vue3语法

问题描述&#xff1a; 整合了vue3.js插件能够识别到vue标准语法和html语法第三方库的语法不支持 原因 因为没配置项目根路径&#xff0c;导致无法识别配置文件 而配置文件是识别第三方库语法所必须的。 我用vite操作的&#xff0c;需要这么几个包&#xff1a; 当识别到这…

22.(地图工具篇)geoserver点服务图层SLD样式效果1

地图之家总目录(订阅之前必须详细了解该博客) 效果如下: SLD样式 <?xml version="1.0" encoding="GBK"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation

【Linux网络编程】Socket-UDP实例

这份代码利用下面所有知识编写了一个简易聊天室&#xff08;基于Linux操作系统&#xff09;。虽然字数挺多其实并不复杂&#xff0c;这里如果能够看完或许会对你的知识进行一下串联&#xff0c;这篇文章比较杂并且网络编程这块知识需要用到系统编程的知识&#xff0c;希望能帮助…

Spring Boot集成EasyExcel实现数据导出

在本文中&#xff0c;我们将探讨如何使用Spring Boot集成EasyExcel库来实现数据导出功能。我们将学习如何通过EasyExcel库生成Excel文件&#xff0c;并实现一些高级功能&#xff0c;如支持列下拉和自定义单元格样式&#xff0c;自适应列宽、行高&#xff0c;动态表头 &#xff…

Open3D 点云配准——可视化匹配点对之间的连线

点云配准 一、算法原理1、概述2、主要函数二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、概述 可视化源点云和目标点云中匹配点对之间的连线,这对于点云配准,尤…

【AI语言大模型】星火使用介绍

一、前言 现在AI语言大模型是百花齐放,挺好!有竞争,有发展,才能推出更好的产品。现在,科大讯飞就推出了大语言模型——星火!能够学习和理解人类的语言,进行多轮对话,回答问题,高效便捷地帮助人们获取信息、知识和灵感。星火在对话栏设置了三个插件:文档回答、PPT生成…

unity 使用声网(Agora)实现语音通话

第一步、先申请一个声网账号 [Agora官网链接]&#xff08;https://console.shengwang.cn/&#xff09; 第二步在官网创建项目 &#xff0c;选择无证书模式&#xff0c;证书模式需要tokenh和Appld才能通话 第三步 官网下载SDK 然后导入到unity&#xff0c;也可以直接在unity商店…