MFC Object 与 Windows Object
MFC Object 和 Windows Object的含义
Window Object(Window对象)是Win32下用句柄表示的Windows操作系统对象。MFC Object(MFC对象)是C++对象,是C++类的实例,而且这里的MFC Object是指封装了Windows Object的C++对象,而不是任意的C++对象。
MFC Object 与 Windows Object的区别于联系
一个MFC窗口对象是C++ CWnd类(或派生类)的实例,是程序直接创建的。在程序运行中它随着窗口类构造函数的调用而生成,随着析构函数的调用而消失。而Windows窗口则是Windows系统的一个内部数据结构的实例,由一个“窗口句柄”标识,Windows系统创建它并为它分配资源。Windows窗口在MFC窗口对象创建之后,由CWnd类的Create成员函数创建,“窗口句柄”保存在CWnd类的m_hWnd成员变量中。每一种Windows Object都有与之对应的MFC Object。
从数据结构上比较
MFC Object是相应的C++ 类的实例,这些类是由程序员或MFC定义的。
Windows Object是Windows系统内部的结构,通过一个句柄引用。
MFC给这些类定义一个成员变量来保存MFC Object对象的Windows Object的句柄。对于CDC类,将会保存两个HDC句柄。m_hDC,m_hAttribDC,它们都是Windows设备描述表句柄。CDC的成员函数作输出操作时,使用m_Hdc;要获取设备描述表的属性时,使用m_hAttribDC。
在层次上比较
MFC Object是高层的,Windows Object是低层的
MFC Object封装了Windows Object的大部分功能或全部功能,MFC Object的使用者不需要直接应用Windows Object的HANDLE(句柄)使用Win32API,代替他的是引用相应的MFC Object的成员函数。
从创建上比较
MFC中使用这些MFC Object通常是先创建一个MFC Object实例,此时这个C++对象是空的,通过调用此MFC Object的成员函数创建一个Windows Object,此Windows Object的句柄将会被保存在此MFC Object的一个句柄成员变量里,此时此MFC Object才有意义。当然也可以在MFC Object的构造函数中调用成员函数创建Windows Object,这样直接创建MFC Object后其就会创建Windows Object。MFC 的GDI类就是这么做的(但是我们要知道MFC Object的创建和Windows Object创建这是两个不同的过程)。
从转换上比较
可以从一个MFC Object得到对应的Windows Object的句柄,一般使用MFC Object的成员函数GetSafeHandle得到对应的句柄。
可以从一个已存在的Windows Object创建一个MFC Object,一般使用MFC Object的成员函数Attach或者FromHandle来创建,前者得到一个永久性对象,后者得到的可能是一个临时对象。
CDC dc;
dc.Attach(hDC); //通过将hDc句柄与此CDC对象“联姻”,也就是想通过此CDC对象使用此hDc句柄标志的设备描述表
dc.Detach(); //"离婚",解除hDc句柄与此CDC对象的关联
在使用范围上比较
MFC Object对系统的其他进程来说是不可见的,而Windows Object一旦创建,其句柄是整个Windows系统全局的。一些句柄可以在其他进程中使用。
对同一个进程的线程来说,只能使用本线程创建的MFC Object,不能使用其他线程创建的MFC Object。
在销毁上比较
MFC Object随着析构函数的调用而消失;但Windows Object必须由相应的Windows系统函数销毁。设备描述表CDC类的对象有所不同,它对应的HDC句柄对象可能不是被销毁,而是被释放。
当然,可以在MFC Object的析构函数中完成对Windows Object的销毁。(但是要知道二者并不相同),GDI对象就是这么做的。
MFC Object 与 Windows Object的更多相关文章
- Object obj=new Object()的内存引用
Object obj=new Object(); 一句很简单的代码,但是这里却设计Java栈,Java堆,java方法去三个最重要的内存区域之间的关联. 假设这句代码出现在方法体中. 1.Object ...
- host Object和native Object的区别
Native Object: JavaScript语言提供的不依赖于执行宿主的对象,其中一些是内建对象,如:Global.Math:一些是在脚本运行环境中创建来使用的,如:Array.Boolean. ...
- Intent传递List和Object和List<Object>
一.传递List 传递List<String>的方法 小技巧,List<object> 可以使用json 转为 List<string>,就可以使用 List< ...
- JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
ECMAScript将对象的属性分为两种:数据属性和访问器属性.每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以 ...
- iOS 杂笔-21(self.name = “object” 和 _name =”object” 有什么不同?)
iOS 杂笔-21(self.name = "object" 和 _name ="object" 有什么不同?) 问题如题,这是考察对属性与变量的了解而已. s ...
- [Javascript] Object.freeze() vs Object.seal()
let person = { firstName: "Zhentian", lastName: "Wan" }; /*Object.freeze() makes ...
- Java基础知识强化26(1):Object类之Object类的概述
1.Object类 类Object是类层次结构的根类,每个类都使用 Object作为超类.所有对象(包括数组)都实现这个类的方法 每个类直接或者间接继承自Object类 2.Object类无参构造 ...
- Object.wait()与Object.notify()的用法
http://www.cnblogs.com/xwdreamer/archive/2012/05/12/2496843.html 参考文献: object.wait()和object.notify() ...
- 遍历对象属性(for in、Object.keys、Object.getOwnProperty)
js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性. ...
随机推荐
- 用 Numba 加速 Python 代码
原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...
- frida hook_RegisterNatives--使用frida打印so中动态注册的函数
原文地址:https://github.com/lasting-yang/frida_hook_libartfrida -U --no-pause -f package_name -l hook_Re ...
- DAOS 分布式异步对象存储|故障模型
DAOS 依靠大规模分布式单端口存储.因此,每个 Target 实际上都是一个单独的失败点. DAOS 通过在不同的容错域中提供 Target 间的冗余来实现数据和元数据的可用性和持久性.DAOS 内 ...
- 批量实现SSH无密码登陆认证脚本
批量实现SSH无密码登陆认证脚本 问题背景 使用为了让linux之间使用ssh不需要密码,可以采用了数字签名RSA或者DSA来完成.主要使用ssh-key-gen实现. 1.通过 ssh-key-ge ...
- [BFS]P1434 [SHOI2002]滑雪
P1434 [SHOI2002]滑雪 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者 ...
- 201871030119-马桂婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客 2018卓越工程师班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程:2.掌握Github协作开发程序的操作方法 ...
- 华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致
摘要:在KV数据库领域,"强一致性"不仅是一个技术名词,它更是业务与运维的重要需求. 清明刚过,五一假期就要来了.大好春光,不如去婺源看油菜花吧!小云迅速打开APP刷出余票2张,赶 ...
- CIE标准色度系统(下)
四.色温与相关色温 根据绝对黑体光谱分布特性的普朗克定律,由普朗克公式可以计算出黑体对应于某一温度的光谱分布,并由此应用CIE标准色度系统可获得该温度下黑体发光的三刺激值和色品坐标,从而在色品图上得到 ...
- ubuntu16.04 安装opencv3.4.0
参考 https://www.cnblogs.com/arkenstone/p/6490017.html https://blog.csdn.net/u013180339/article/detail ...
- 「HTML+CSS」--自定义加载动画【017】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...