一、资源、句柄和ID

资源:

MFC中的资源,如菜单、对话框、图标、工具条、对话框等,是windows创建的,并占用堆内存。windows在创建这些资源时候会给每个资源分配一个句柄,用来标记这些资源,通过API或函数,可以通过句柄访问这些资源。资源的特点是,它存储在堆内存中。所以创建后就不容易被自动销毁。如果要销毁它,就得手动销毁。

句柄:

所有句柄是windows自动给资源分配的一个标识,用于方便进程访问资源,它本质是一个unsigned int,即无符号32未整数。

只要主观上能知道windows可以通过句柄访问到资源就可以了。

往深处讲句柄是一个数据结构(struct),第一项保存着资源的逻辑地址,这个逻辑地址通过一个页表(映射表)映射到资源的实际地址。(这涉及到cpu与内存相互访问的知识,从这里也可以看出句柄和资源是相互关联映射的,可以将句柄看作是指针的指针)

ID:

句柄是OS分配给资源的标识,方便os访问资源,而ID是用户分配给资源的标识,方便用户访问通过函数资源()。

二、对象:

对象是类实例化的产物,os会为对象分配内存,但有局部对象和全局对象,它们的生存期也不一样。

三、资源与对象的关系:

对于窗口,对话框,菜单等资源,它和CWnd、CDialog、CMenu对象不是同一个东西。后者可以操作前者(创建,删除等),而前者是我们实实在在看到的那个界面。

二者要发生关系必须要发生关联。例如CWnd有个成员变量m_hWnd用来保存资源的句柄,这样一个对象就与资源本身发生了关联。

当资源和对象发生联系后,对象析构后,资源也会被销毁。如果不想销毁资源,可以解构二者之间的关系

Attach(HWND)//将资源句柄与对象关联

Detach()//解构句柄与对象的关联

另外当对象本身也可以通过资源的ID加载资源达到关联资源的效果(前提是这些资源模板已经创建):

LoadFrame(ID)//加载主框架

LoadMenu(ID)//创建菜单

LoadToolbar(ID)//创建工具条

CDialog::Create(ID)//创建非模态对话框

当资源还不存在时,也可以创建关联

最新文章

  1. java单例的几种实现方法
  2. IOS响应式编程框架ReactiveCocoa(RAC)使用示例
  3. 解决AutoCAD2010在VS2010上无法命中断点
  4. HashMap与ArrayList互相嵌套的代码实现
  5. Backbone入门——开发第一个Backbone页面
  6. uva1262Password
  7. Spring与Struts整合
  8. Hive基础(1)---Hive是什么
  9. 30天学会绘画 (Mark Kistler 著)
  10. Android逆向破解表单登录程序
  11. GoldenGate for Java Adapter介绍一(原理篇)
  12. Postgres——pgadmin复制无主键单表至本地数据库
  13. 【uoj291】 ZJOI2017—树状数组
  14. ssh和scp时指定端口
  15. Jmeter 抓app包 抓到一半不好用了
  16. jQuery碎语(4) 实用函数
  17. spring-test与junit
  18. seebug的反爬虫技术初探
  19. Spark2.0机器学习系列之9: 聚类(k-means,Bisecting k-means,Streaming k-means)
  20. Linux:grep命令详解

热门文章

  1. PHP 学习内容
  2. 登录shell与非登录shell读取文件过程
  3. phpcms控制器变量分配到模板
  4. mac地址绑定
  5. Windows 下Node.js开发环境配置
  6. 关于ionic开发中遇到的坑与总结
  7. sql获取数组指定元素
  8. ruby on rails 生产环境调试项目日志查看
  9. 从输入url到浏览器呈现网页发生了什么?
  10. MySQL服务器调优思路