一、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()函数相关推荐

  1. R语言attach函数、detach函数(全局注册或者全局解除)实战

    R语言attach函数.detach函数(全局注册或者全局解除)实战 目录 R语言attach函数.detach函数(全局注册或者全局解除)实战 #基本语法 # 仿真数据 # 如果没有attach就直 ...

  2. Attach、Detach和DeleteObject

    原文:Attach.Detach和DeleteObject ,想飞的梦想 1.CWnd Attatch和Detach的关系 首先,要明白Windows对象和MFC对象的区别. MFC对象实际上并没有把 ...

  3. [转] Attach、Detach和DeleteObject

    原文:Attach.Detach和DeleteObject ,想飞的梦想 1.CWnd Attatch和Detach的关系 首先,要明白Windows对象和MFC对象的区别. MFC对象实际上并没有把 ...

  4. attach()与detach()的使用

    attach()与detach()需要配对使用,如果使用了attach而未使用detach,再次使用attach时,会有"对象被屏蔽"的问题,如下: 转载于:https://www ...

  5. docker container的attach和detach模式

    docker container 容器运行的attach和detach模式 attach模式 docker run nginx 类似运行于前台的进程,会占据本地的STDIN和STDOUT detach ...

  6. 详解PyTorch中的copy_()函数、detach()函数、detach_()函数和clone()函数

    参考链接: copy_(src, non_blocking=False) → Tensor 参考链接: detach() 参考链接: detach_() 参考链接: clone() → Tensor ...

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

    一.Windows对象和MFC对象的区别? MFC对象实际上并没有把整个Windows对象都包装在其中. 对于窗口:MFC对象它只是有一个窗口句柄而已,这个窗口句柄如果指向一个实际存在的窗口对象(窗口 ...

  8. VC中的Attach和Detach

    CWnd,CDC, Cxxx等都是MFC的类,这些类提供了很多成员函数来执行系统调用等操作,但是核心的类成员数据都是 句柄, (包括窗口句柄,DC句柄,线程句柄等).  m_hWnd  m_hDC  ...

  9. attach和detach区别

    函数attach()可以直接访问数据框的列,而无须添加相应的数据框名 detach可以禁止访问数据库的列

最新文章

  1. java实现模拟考试系统,基于jsp的驾照模拟考试系统a-JavaEE实现驾照模拟考试系统a - java项目源码...
  2. Maven推出强化项目:maven-mvnd,构建速度大幅提升!
  3. java遍历集合选择题_Java集合知识测试B
  4. python联盟是什么意思_Python 与 英雄联盟(1)
  5. Java基础—复制之深拷贝与浅拷贝
  6. 步进电机控制芯片_STK682/步进电机_STK682-010-E控制芯片 原创中文翻译
  7. IllegalArgumentException:@Body parameters cannot be used with form or multi-part encoding
  8. 什么不是预防计算机病毒的方法,预防计算机病毒的方法是什么
  9. 开启spring boot学习之旅
  10. mysql 批量 update 多个条件_Mysql学习与巩固,超详细的小白篇
  11. 【NOIP2013提高组】华容道
  12. [OpenGL] L系统 分形树的实现(L-System植物建模)
  13. 【网络安全】小白每天学一点之“监控应用程序行为” [process monitor]
  14. 编写程序,提示用户输入一个数并显示该数,使用字符模拟7段显示器的效果:Enter a number:491-9014
  15. ZZNU-正约数之和(DP)
  16. CTO创新思维与能力
  17. UE《空山新雨后》总结笔记
  18. 解决远程连接服务器的最大连接数
  19. 想同你 看尽人家烟火,游过万代山河(HTML实现点击烟火特效)
  20. 获取屏幕高度——浏览器高度、控制台高度、工具栏高度

热门文章

  1. LM_Sensors on Cent OS 5.4 How To Get And Install The Coretemp Module
  2. 换个角度看“Q币门”事件
  3. PPT文字怎样规划 哪里可以代做PPT
  4. HTTP中Accept与Content-Type区别
  5. xenserver 模板导出导入
  6. hashlib摘要算法模块,logging日志,configparser配置文件模块
  7. python3.6安装版本选择
  8. Innodb表压缩过程中遇到的坑(innodb_file_format) - billy鹏
  9. CentOS防火墙配置方法-详细解读如何配置CentOS防火墙
  10. Echart图表X轴为时间轴的解释