关于MFC资源句柄、ID和对象
一、资源、句柄和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)//创建非模态对话框
当资源还不存在时,也可以创建关联
关于MFC资源句柄、ID和对象的更多相关文章
- MFC中获取各个窗口之间的句柄或者指针对象的方法
MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决. HWND hWnd=::FindWindow(NULL,_T("S ...
- (转)MFC中获得各个类的指针/句柄 ID的总结
http://www.cnblogs.com/ylhome/archive/2009/10/06/1578478.html 一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard ...
- AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源
AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: ...
- MFC资源冲突解决方法
AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: 1.创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID ...
- MFC绘图相关GDI工具对象和函数介绍
在利用MFC进行界面编程时,除了需要熟悉各种类型控件的操作外,还会经常遇到图形绘制和显示的问题,比如时频分析界面.图像处理界面等.处理这些软件界面开发问题时,不可避免地需要用到一系列GDI工具对象和相 ...
- Mfc资源消息的响应机制
Mfc消息的响应机制 Mfc中有很多资源,如图标资源,菜单资源,工具栏资源等等:那么,资源是如何进行消息响应和消息映射的呢? 它们的流程是: 某种资源——对应的ID号——消息映射——响应函数的声明与实 ...
- 对比MFC资源文件谈谈WPF布局方式
对比MFC资源文件谈谈WPF布局方式 MFC方式 对于传统的MFC基于UI的应用程序设计通常分两步走,首先是设计UI,使用的是RC文件,然后是代码文件,对RC文件进行操作,如下面Figure 1 的基 ...
- 获取spring的IOC核心容器,并根据id获取对象
public class Client { /** * 获取spring的IOC核心容器,并根据id获取对象 * ApplicationContext的三个常用实现类 * classPathXmlAp ...
- Android 自己主动化測试(3)<monkeyrunner> 依据ID查找对象&touch&type (python)
我在之前的两篇文章中用java来实现过 Android 自己主动化測试(1)怎样安装和卸载一个应用(java).Android 自己主动化測试(2)依据ID查找对象(java). 可是本质上都是用mo ...
随机推荐
- Map 和 javaBean转换
package com.siang.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.bean ...
- Netty实战
一.Netty异步和事件驱动1.Java网络编程回顾socket.accept 阻塞socket.setsockopt /非阻塞2.NIO异步非阻塞a).nio 非阻塞的关键时使用选择器(java.n ...
- web安全之SQL注入---第三章 如何寻找sql注入?
借助逻辑推理1.识别web应用中所有输入点2.了解哪些类型的请求会触发异常3.检测服务器响应中的异常 总结: 输入点无非就是:地址栏.和输入框 输入康输入一些非法字符,导致后台的sql语句错误,
- Android拍照生成缩略图
在Android 2.2版本中,新增了一个ThumbnailUtils工具类来是实现缩略图,此工具类的功能是强大的,使用是简单,它提供了一个常量和三个方法.利用这些常数和方法,可以轻松快捷的实现图片和 ...
- 快捷标签和ajax、json返回数据
<if 判断条件>标签</if><import>标签可以链接外部的样式表,和js<import file="js.util.Array" ...
- Gaby Ivanushka(快排)
Gaby Ivanushka Once upon a time there lived a tsar that has a daughter — Beautiful Vasilisa. There w ...
- [note]fhq_treap
fhq_treap 这东西据说是某个叫范浩强的神仙搞出来的, 他的这种treap可以不用旋转并且资磁很多平衡树操作, 复杂度通过随机的键值来保证(树大致平衡,期望一次操作复杂度\(logn\)) 依靠 ...
- Cordova 教程 学习步骤-从零基础开始
Cordova的技术交流新群
- nc传文件
nc传文件 先启动接收方 nc -l -p 9999 > index.lua 后启动发送方 nc 192.168.1.1 9999 < index.lua
- python3函数内全局变量使用global
def p_num(): global num num = 10 print (num) num = 5 p_num() print(num)