MFC Attach()函数和Detach()函数

一、Windows对象和MFC对象的区别?
MFC对象实际上并没有把整个Windows对象都包装在其中。
对于窗口:MFC对象它只是有一个窗口句柄而已,这个窗口句柄如果指向一个实际存在的窗口对象(窗口对象,也就是WNDCLASS,是一个Windows对象),那么这个MFC对象就是有效的,否则这个MFC对象是空的。
如果你还不明白,请回忆一下,当我们使用MFC创建一个窗口时,是分两步进行的:
第一步,new一个CWnd对象,这一步是创建MFC对象,但是其中的HWND还是非法的,因为对应的Windows对象还没有被创建出来;
第二步,调用CWnd的成员函数Create创建真正的Windows对象,同时,把先前创建的MFC的CWnd对象的HWND成员指向该窗口,这样才算创建完毕一个窗口。
而如果你是用SDK方式,那么只要创建一个WNDCLASS结构,然后调用Create或者CreateEx就创建了一个窗口。   

二、Attach  Detach
【Attach】 假设你已经有了一个有效窗口句柄,那么你想把这个窗口和一个CWnd对象关联起来怎么办?很简单,用Attach,其实就是让一个CWnd对象的HWND成员指向这个窗口句柄。这就是Attach主要完成的任务。
   
【Detach】如前所述,WNDCLASS其实和CWnd根本没有什么关系。它们之间只是通过CWnd的成员HWND联系起来的。如果把Attach看做“联姻”的话,那么Detach就是“离婚”了,通俗地说,就是切断一个CWnd对象和一个有效窗口的脐带。为什么要切断呢?因为CWnd是C++的对象,C++的对象有一个生存期的概念,脱离了该对象的作用域,这个对象就要被销毁,但是Windows对象没有这个特点,当销毁CWnd对象的时候,我们不一定希望WNDCLASS一起被销毁,那么在此之前,我们就先要把这个“脐带”剪断,以免“城门失火,殃及池鱼”。Understand?

基本就是把一个句柄绑定和解绑定于一个类对象上,是其可以使用MFC的函数而不是API


程序代码 程序代码
     if (oldbmp != NULL)
      {
       wdc.SelectObject(oldbmp);
      }
      DeleteObject(bmp.Detach());  // bmp自定义的一个位图句柄
      
      HBITMAP hdib = CreateDIBSection(wdc.m_hDC,&m_bmi,DIB_RGB_COLORS,(void**)&m_pbyte,NULL,0);
      ASSERT(hdib);
      bmp.Attach(hdib);

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

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

相关文章

用“谬论”指挥研究方向数十年,是谁让“老年痴呆”至今仍是绝症?

全世界只有3.14 % 的人关注了青少年数学之旅阿尔兹海默症,是“老年痴呆”的正确科学名称。它可能是世界上最广为人知的“绝症”之一:不仅让患者丧失了记忆和自我,也一直令在寻找治疗方法的学者和医药企业束手无策。30 多年前出现的“淀粉样蛋…

linux改环境语言,linux下改变语言环境

1、查看当前语言变量值$ locale2、查看系统内安装的语言$ locale -a3、临时修改语言值$ export LC_ALLen_US.UTF-8$ export LANGUAGEen_US:en$ export LC_ALLzh_CN.UTF-8$ export LC_ALLzh_CN.GB18030$ export LANGUAGEzh_CN:zh:en_US:en4.1、永久修改系统的语言值修改文件/etc…

杀毒软件

俗话说,每天打雁,结果被雁x了……不慎中了Trojan-PSW.Win32.QQPass.gf木马根据目前的测试,瑞星,Macfee,毒霸都没有能查出来这个木马只好手工删了。转载于:https://www.cnblogs.com/skogkatt/archive/2006/05/04/416321…

NLog源码解读——StringBuilderPool

刚刚骚情的跑了下NLog测试,,,,,一篇文章就那么Crash了~~~好吧,这次简化下,直接进入正题,有关GC的东东参考网上大部分文章吧。源码分析// StringBuilder 的建立也会耗费大量的资源&am…

oracle 11g(二)安装过程

(一)解压oracle 11g压缩包注:分别下载oracle 11g的1of2、2of2这两个zip压缩包,将其拷贝到/usr/src目录中解压。[rootserver src]#unzip linux.x64_11gR2_database_1of2.zip[rootserver src]#unzip linux.x64_11gR2_database_2of2.zip(二)安装oracle 11g以…

一定要多角度看事物 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅一定要多角度看事物岁月对我们做了什么无法反驳论发型的重要性坐骨神经痛被赋予了新含义老师真的很会总结了(图源E_Volution_)扎心了↓ ↓ ↓

从别的地方转来的 网址

网上24个免费图书网站[转贴] 中国数字图书馆 http://www.d-library.com.cn/ ; 权威的在线图书馆。 瑞德超星在线图书馆 http://www.rol.cn.net/library ; 规模大,藏书丰富,包括社会科学、人文科学、自然科学等领域的著作和历史文献等。 可是…下载图书要…

烧录imx6需要的linux空间,IMX6Q学习笔记——开发板的Linux系统更新和烧录

IMX6Q学习笔记——开发板的Linux系统更新和烧录记录自己在电鱼电子开发SAIL-IMX6Q全能板后,并且对系统和模块进行简单测试的过程之后对开发板的Linux系统进行更新和烧录的记录过程,算是进行一个分享和记录,同时也方便自己日后查阅。首先准备好…

ABP Framework:移除 EF Core Migrations 项目,统一数据上下文

原文:Unifying DbContexts for EF Core / Removing the EF Core Migrations Project[1]导读:软件开发的一切都需要平衡在 ABP Framework V4.4 RC 新增功能介绍 中,对应用程序启动解决方案模板做了一个重要改变:删除 EntityFramewo…

Hello Python

2019独角兽企业重金招聘Python工程师标准>>> My first Python demo>>> movies["a","b","c"] >>> print(movies[0]) a >>> print(movies[1]) b >>> >>> print(movies) [a, b, c…

牛顿儿时成绩很差,5岁开始接触物理,也许是他如此伟大的唯一原因!

全世界只有3.14 % 的人关注了青少年数学之旅我们都知道,牛顿是伟大的物理学家,但是也许很多人不知道,牛顿也是平常的孩子,他不是神童,成绩很一般。那牛顿是如何成为如此伟大的物理学家的呢?原来&#xff0c…

世界杯,世界共同的游戏!

还有几天了,学校也准备通宵供电!冰镇啤酒酒鬼花生世界杯今夜无人入睡世界杯程序员可乐?忙了4年了,给自己放一个小假吧亚瑟王说:饥饿是敌人,疲劳是敌人Set U Free! 转载于:https://www.cnblogs.com/zc1984/a…

linux删除grid数据文件,MongoDB进阶系列(13)——GridFS大文件的添加、获取、查看、删除...

GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种:存储巨大的文件,比如视频、高清图片等。利用GridFS可以简化需求。GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易GridFS可以避免用…

关于c#:Filter Serilog日志取决于上下文源到不同的接收器?

我有一个.NET Core 2.0应用程序,可以在其中成功使用Serilog进行日志记录。现在,我想将一些数据库性能统计信息记录到一个单独的接收器中(它们不是用于调试的,这基本上是应用程序中所有其他记录的目的,因此我想将它们分开)&#xf…

C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列、strlen的递归解法、汉诺塔和全排列递归算法。 一、递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思想。 这个是常见的一种数学算法,其实它…

【物理动图】物理老师一针见血:50张动图看懂高中物理

全世界只有3.14 % 的人关注了青少年数学之旅相互作用作用力与反作用力的特点是什么?摩擦力的大小跟什么有关系?图中两个弹簧的弹力大小是否一样?若一样,为什么?自行车前后轮所受力的方向是什么?物块所受支持…

变动翻屏展示图片效果

<HTML><HEAD><TITLE>变动展示图片效果</TITLE><META http-equivContent-Type content"text/html; charsetgb2312" /><STYLE typetext/css>A:link { COLOR: #00007f; TEXT-DECORATION: none}A:visited { COLOR: #00007f; T…

linux expr格式,计算2-expr命令举例

# **一、expr命令**## **1.语法和功能**只能用于整数运算和字符串长度、匹配等运算处理expr 2 2expr 2 - 2expr 2 \* 2expr 2 / 2i5;iexpr $1 6;echo $i> 说明&#xff1a;运算符及用于计算的数字左右都至少有一个空格&#xff0c;否则会报错乘号需要转义在shell中进行变量…

打造史上最小尺寸.Net Core单文件应用程序

.Net Core支持将应用程序发布成单文件进行部署和分发。以下示例将Windows应用作为独立的单文件应用程序发布&#xff1a;dotnet publish -r win-x64 -c Release /p:PublishSingleFiletrue /p:PublishTrimmedtrue /p:IncludeNativeLibrariesForSelfExtracttrue查看publish目录&a…

别说了,叫爸爸吧! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;视频源网络&#xff0c;侵权删&#xff09;女主最后的微笑意味深长啊↓ ↓ ↓