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一起被销毁,那么在此之前,我们就先要把这个“脐带”剪断,以免“城门失火,殃及池鱼”。
基本就是把一个句柄绑定和解绑定于一个类对象上,是其可以使用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);
转载于:https://www.cnblogs.com/tinaluo/p/7363572.html
Attach()和Detach()函数相关推荐
- R语言attach函数、detach函数(全局注册或者全局解除)实战
R语言attach函数.detach函数(全局注册或者全局解除)实战 目录 R语言attach函数.detach函数(全局注册或者全局解除)实战 #基本语法 # 仿真数据 # 如果没有attach就直 ...
- Attach、Detach和DeleteObject
原文:Attach.Detach和DeleteObject ,想飞的梦想 1.CWnd Attatch和Detach的关系 首先,要明白Windows对象和MFC对象的区别. MFC对象实际上并没有把 ...
- [转] Attach、Detach和DeleteObject
原文:Attach.Detach和DeleteObject ,想飞的梦想 1.CWnd Attatch和Detach的关系 首先,要明白Windows对象和MFC对象的区别. MFC对象实际上并没有把 ...
- attach()与detach()的使用
attach()与detach()需要配对使用,如果使用了attach而未使用detach,再次使用attach时,会有"对象被屏蔽"的问题,如下: 转载于:https://www ...
- docker container的attach和detach模式
docker container 容器运行的attach和detach模式 attach模式 docker run nginx 类似运行于前台的进程,会占据本地的STDIN和STDOUT detach ...
- 详解PyTorch中的copy_()函数、detach()函数、detach_()函数和clone()函数
参考链接: copy_(src, non_blocking=False) → Tensor 参考链接: detach() 参考链接: detach_() 参考链接: clone() → Tensor ...
- MFC Attach()函数和Detach()函数
一.Windows对象和MFC对象的区别? MFC对象实际上并没有把整个Windows对象都包装在其中. 对于窗口:MFC对象它只是有一个窗口句柄而已,这个窗口句柄如果指向一个实际存在的窗口对象(窗口 ...
- VC中的Attach和Detach
CWnd,CDC, Cxxx等都是MFC的类,这些类提供了很多成员函数来执行系统调用等操作,但是核心的类成员数据都是 句柄, (包括窗口句柄,DC句柄,线程句柄等). m_hWnd m_hDC ...
- attach和detach区别
函数attach()可以直接访问数据框的列,而无须添加相应的数据框名 detach可以禁止访问数据库的列
最新文章
- java实现模拟考试系统,基于jsp的驾照模拟考试系统a-JavaEE实现驾照模拟考试系统a - java项目源码...
- Maven推出强化项目:maven-mvnd,构建速度大幅提升!
- java遍历集合选择题_Java集合知识测试B
- python联盟是什么意思_Python 与 英雄联盟(1)
- Java基础—复制之深拷贝与浅拷贝
- 步进电机控制芯片_STK682/步进电机_STK682-010-E控制芯片 原创中文翻译
- IllegalArgumentException:@Body parameters cannot be used with form or multi-part encoding
- 什么不是预防计算机病毒的方法,预防计算机病毒的方法是什么
- 开启spring boot学习之旅
- mysql 批量 update 多个条件_Mysql学习与巩固,超详细的小白篇
- 【NOIP2013提高组】华容道
- [OpenGL] L系统 分形树的实现(L-System植物建模)
- 【网络安全】小白每天学一点之“监控应用程序行为” [process monitor]
- 编写程序,提示用户输入一个数并显示该数,使用字符模拟7段显示器的效果:Enter a number:491-9014
- ZZNU-正约数之和(DP)
- CTO创新思维与能力
- UE《空山新雨后》总结笔记
- 解决远程连接服务器的最大连接数
- 想同你 看尽人家烟火,游过万代山河(HTML实现点击烟火特效)
- 获取屏幕高度——浏览器高度、控制台高度、工具栏高度
热门文章
- LM_Sensors on Cent OS 5.4 How To Get And Install The Coretemp Module
- 换个角度看“Q币门”事件
- PPT文字怎样规划 哪里可以代做PPT
- HTTP中Accept与Content-Type区别
- xenserver 模板导出导入
- hashlib摘要算法模块,logging日志,configparser配置文件模块
- python3.6安装版本选择
- Innodb表压缩过程中遇到的坑(innodb_file_format) - billy鹏
- CentOS防火墙配置方法-详细解读如何配置CentOS防火墙
- Echart图表X轴为时间轴的解释