一、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);

MFC Attach()函数和Detach()函数相关推荐

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

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

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

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

  3. pytorch的两个函数 tensor.detach(),tensor.detach_(),tensor.clone() 的作用和区别

    前言:当我们在训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整:或者值训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一 ...

  4. MFC添加自定义消息及处理函数

    添加消息 在头文件中添加: #define WM_MYMSG WM_USER+1 WM_USER以下的消息都是系统消息,所以自定义消息时,ID要比WM_USE大: 添加函数声明(用于响应自定义消息): ...

  5. 关于MFC框架下的TextOut()函数输出变量的值

    关于MFC框架下的TextOut()函数输出变量的值(int转String类型) 一.TextOut()参数介绍 BOOL TextOut ( //如果函数调用成功,返回TRUE,否则,返回FALSE ...

  6. MFC之画刷填充矩形函数、马赫带、加载图片资源

    1.笔记 1.1画刷填充矩形函数 函数原型: void CDC::FillRect(LPCRECT lpRect,CBrush* pBrush); 该函数相比FillSolidRect函数的优势在于可 ...

  7. 【MFC】GetDC函数、GetWindowDC函数 与 ReleaseDC函数介绍

    01.目录 目录 01.目录 02.GetDC()函数 2.1 GetDC()示例 03.GetWindowDC()函数 3.1 GetWindowDC()示例 04.ReleaseDC()函数 02 ...

  8. 【转】StretchBlt函数和BitBlt函数的用法

    原帖地址:StretchBlt函数和BitBlt函数的用法 StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要 ...

  9. plot画分段函数_python画图函数大全

    很多时候,我们需要用python画图,这样就可以更加直观的看到数据的走势,而不是干巴巴的数字. 今天,我们就给大家整理了一下python画图的常用函数,由于篇幅限制.无法将这些函数的使用方法全部表现出 ...

最新文章

  1. 已经导入jar包mysql还是报错_java通过JDBC连接数据库,老是报错:ClassNotFoundException.该导入的jar包我也已经导入了。...
  2. delphi dbgrideh 遍历每一个单元格_用Python解数独[1]:求每个单元格的行值域
  3. 青龙羊毛——灰兔掌赚吹牛逼
  4. gradle groovy_适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock
  5. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
  6. 您收到一封 2019 阿里云峰会 (北京) 邀请函
  7. 哈希表的最差复杂度是n2_给定数组A []和数字X,请检查A []中是否有对X | 使用哈希O(n)时间复杂度| 套装1...
  8. Android仿人人客户端(v5.7.1)——Auth授权认证(整理流程,重构代码)
  9. Django 强大的ORM之增删改查
  10. 目标检测(Object Detection)的整理
  11. ios 渐变透明背景_PPT背景常见的6种设计方法
  12. Markdown转Jupyter
  13. 《微观经济学新论》读书笔记
  14. onload事件和ready方法的区别
  15. java里异常名词解释_java名词解释
  16. Python-小游戏-乌龟吃鱼
  17. 计算机常见的应用系统,计算机常见的系统软件
  18. jmeter参数化之函数助手
  19. 服务器主体信息截图,puppeteer实现线上服务器任意区域截图
  20. NSACE|如何正确地维护企业的网络信息安全?

热门文章

  1. MySQL修改字符集
  2. Nginx服务学习(6)-日志模块
  3. Go语言与数据库开发:01-09
  4. Linux服务器重启后crs_stat -t 命令无法正常使用以及解决思路
  5. Python 模块之 string.py
  6. 【原创】erlang 模块之 application
  7. Extjs 中的cookie设置
  8. 定义命令别名(alias)
  9. Rails IDE 有很多选择,但是具体到ubuntu 64bit 选择的余地就不多了,这里选择Aptana Studio 3 Beta...
  10. html5波浪线条,HTML5 svg炫酷波浪线条动画插件