VC++ GetSafeHwnd()和GetSafeHandle()
GetSafeHwnd()和GetSafeHandle()的主要区别:
使用者不同:
(1)窗体使用:GetSafeHwnd()用于获取窗体的安全句柄(即HWND),有了HWND我们就可以方便的对HWND指向的窗体进行所需的操作了;
(2)GDI对象使用:GetSafeHandle(),用于获取GDI对象的句柄。
注意:在使用指针时强烈建议这么做:
// pSomeWnd 为一个窗体的指针
if ( NULL != pSomeWnd && NULL != pSomeWnd->GetSafeHwnd())
{
// do something.
}
内存句柄与指针的区别:
|
(1).句柄其实就是指针,但是他和指针最大的不同是:给你一个指针,你可以通过这个指针做任何事情,也许是好事,也许是通过这个指针破坏内存,干一些捣乱的事情。这个我想大家都会碰到过,因为乱用指针可能会导致程序崩溃。 (2).句柄是一些表的索引也就是指向指针的指针。 句柄和指针都是地址,句柄是windows编程的一个关键性的概念,编写windows应用程序总是要和各种句柄打交道。 由于windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。这些运行的程序称为一个实例。为了对同一程序的多个副本进行管理,windows引入了实例句柄。windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。 不同之处还在于: 附注:获得窗口句柄三种方法 1.HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName); HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, 2.HWND WindowFromPoint( 3.BOOL CALLBACK EnumChildProc( HWND hwnd, LPARAM lParam); BOOL EnumChildWindows( HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam ); BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam ); BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ); 补充知识:指针和句柄之间的转换 a.由指针获得句柄 b.由句柄得到指针: mfc类中有的还提供了标准方法,比如window 句柄 : 对于位图: 有人说句柄就是一个标示,一个id号,是错误的。一个id号可以包括多个资源,比如说单文档中的idr_mainframe,一般是指在硬盘上的资源。但是当把硬盘上的资源调入内存以后,将有一个句柄指向它,但是句柄只能指向一个资源。而且句柄知道所指的内存有多大。而指针指向地址,它不知道分配的内存有多大。 句柄是个指针,指向一块内存,但至于这块内存跟句柄所标识的对象是怎么联系起来的,调用者不需要清楚,调用者只需要知道,这个句柄联系着一个win32对象。 句柄就是受限的指针。 操作系统在创建一个对象(如gdi, file)等的时候,它会为这个对象上下文context保留一块数据结构,然后把它放在一张全局表中。句柄就是这块数据结构在表中的索引。 |
VC++ GetSafeHwnd()和GetSafeHandle()的更多相关文章
- [转载]从GetSafeHwnd()和GetSafeHandle()分析句柄和指针
GetSafeHwnd()和GetSafeHandle()的主要区别: 1.使用者不同: (1)窗体使用: GetSafeHwnd()用于获取窗体的安全句柄(即HWND),有了HWND我们就可以方便的 ...
- VC++ GetSafeHwnd用法
GetSafeHwnd HWND GetSafeHwnd() const; 当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数. ...
- windows ハンドル
windows句柄 这篇文章是我在学习的时候为了以后忘记所以把当时的理解记录下来.一定有不正确的地方,所以仅供参考. 我们初学VC++是经常遇到一些我们在标准C++中没有的数据类型,如句柄,消息. ...
- VC常用小知识
(1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现.AfxGetMainWnd() ->Sho ...
- VC中句柄、指针、ID之间的转换
win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量. 从句柄到指针 CWnd* pWnd ...
- VC++ 6.0中实现三叉切分窗口与多视图 [转]
一.引用 当用户需要同时对文当的不同部分进行编辑时,常常会用到切分窗口;这些窗口可以都是相同的视,或者一个窗口为列表视,而另一个为树型视图.应用程序框架有多种方式来表示多视图,切分窗口是其中的方式之一 ...
- 【转】vc中使用SendMessage正确发送自定义消息的方法--不错
原文网址:http://zhoumf1214.blog.163.com/blog/static/5241940200910265532959/ 最近在用VC2008做开发,后来由于要用到消息的发送,而 ...
- VC中窗口ID,句柄,指针三者相互转换函数【转】
ID--HANDLE--HWND三者之间的互相转换id->句柄 hWnd = ::GetDlgItem(hParentWnd,id);id->指针 CWnd:: ...
- 精通 VC++ 实效编程280例 - 01 窗口
窗口是屏幕上的一个矩形区域.窗口分为3种:重叠窗口.弹出窗口和子窗口.每个窗口都有由系统绘制的“非客户区”和应用程序绘制的“客户区”.在 MFC 中,CWnd 类为各种窗口提供了基类. 1 通过 HW ...
随机推荐
- 【Excle数据透视】多列分别分类计数
需求 今天碰到一个很特殊的需求,如下(分别对每一列的值去重并统计个数): 预期结果 实现方法 推荐使用第三种方案,因为不用写公式,比较简单! 方法一:使用countif函数 在单元格J2输入公式COU ...
- 微信小程序弹窗组件
概述 自己封装的一个比较简单微信弹窗小组件,主要就是教会大家对微信小组件的用法和理解,因为微信小程序对组件介绍特别少,所以我就把自己的理解分享给大家 详细 代码下载:http://www.demoda ...
- 微信小程序项目实战之豆瓣天气
概述 微信小程序项目实战之豆瓣天气 详细 代码下载:http://www.demodashi.com/demo/10943.html 一.准备工作 1.注册微信小程序 2.在小程序设置中设置reque ...
- Python 调试:step into/step out/step over 的区别
Python 调试:step into/step out/step over 的区别: 首先在PyCharm 程序中设置 “ 断点 ”,后点击右上角的Debug 按钮进入调试程序状态: step in ...
- Centos 7 防火墙
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体.启动一个服务:systemctl start firewalld.service ...
- Java Persistence with MyBatis 小结3
1 映射器配置文件和映射器接口 在 com.mybatis3.mappers 包中的 StudentMapper.xml 配置文件内,是如何配置 id 为”findStudentById”的 SQL ...
- JEECG与帆软报表集成
将FineReport 集成到自己的web项目中,生成报表,可以方便快捷的和自己的项目融合在一起.简化了利用poi的导出遇到的问题. 1.首先在FR中建立好一个模板 例如:我的这张模板是连接 ...
- Android学习笔记(八)——显示运行进度对话框
显示运行进度对话框 我们经常有这种经历:运行某一应用程序时.须要等待一会,这时会显示一个进度(Please Wait)对话框,让用户知道操作正在进行. 我们继续在上一篇中的程序中加入代码~ 1.在上一 ...
- PHPStorm 10 激活
按照这篇东东的说法去做已经不行了~ 可以参考我的另外一篇~ 传送门: http://www.cnblogs.com/gssl/p/5686612.html 楼主的图片看不到,下面是我找到的.分享出来. ...
- Ununtu 15.04 安装MySql(Django连接Mysql)
本文介绍Ubuntu 15.04下安装MySQL ubuntu 15.04安装mysql django项目连接mysql 一.安装数据库 1.sudo apt-get install mysql-se ...