关于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 ...
随机推荐
- python 学习2 测试报告
1. py.test test_class.py --resultlog=./log.txt 2.生成html格式 py.test test_class.py --html=./report.htm ...
- json性能测试
http://www.open-open.com/lib/view/open1434377191317.html
- 函数柯里化常见应用---add(1,2) add(1)(2) add(1)(2)(3) add(1,2,3)(4)
这是一道经典的题目,先上代码: 解法1: function add () { var args = Array.prototype.slice.call(arguments); var fn = fu ...
- Lumen开发:Lumen的异常处理机制
版权声明:本文为博主原创文章,未经博主允许不得转载. Lumen的核心类Application引用了专门用于异常处理的RegistersExceptionHandlers, class Applica ...
- cocos2d-x 3.0rc1 使用iconv库 解决UTF8乱码问题
多国语言要用到开源字符转换 iconv 先贴出自己的使用代码 你能够做成头文件 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include &qu ...
- 百度地图SnapshotReadyCallback截屏
今天碰到了地图截图的功能,不太会,查查资料知道怎么弄了,跟大家分享一下 直接上代码,弄了一个方法,将截取的图片上传至服务器,返回给我们图片路径 //获取地图截图 private void getscr ...
- lua 元表是个啥?
function readOnly(t) local proxy = {} local mt = { __index = t, __newindex = function(t,k,v) error(& ...
- 自编码器(autoencoder)
今天我们会来聊聊用神经网络如何进行非监督形式的学习. 也就是 autoencoder, 自编码. 压缩与解压 有一个神经网络, 它在做的事情是 接收一张图片, 然后 给它打码, 最后 再从打码后的图片 ...
- 路由器桥接(WIFI无线中继)设置及摆放位置图解
路由器桥接(WIFI无线中继)设置及摆放位置图解 WIFI实在好用,但它的波覆盖面小.穿透力很差.我们安装时要考虑波的衍射特点,装在衍射效果最佳的位置(居中,室外可绕,避开密封墙).确实无法兼顾的地方 ...
- strstr使用
extern char strstr(char str1, const char *str2); 语法: strstr(str1,str2) str1: 被查找目标 string expression ...