GetSafeHwnd()和GetSafeHandle()的主要区别:

1.使用者不同:

(1)窗体使用:

GetSafeHwnd()用于获取窗体的安全句柄(即HWND),有了HWND我们就可以方便的对HWND指向的窗体进行所需的操作了;

(2)GDI对象使用:

GetSafeHandle(),用于获取GDI对象的句柄。

注意:在使用指针时强烈建议这么做:

// pSomeWnd 为一个窗体的指针

if ( NULL != pSomeWnd && NULL != pSomeWnd->GetSafeHwnd())

{

// do something.

}

内存句柄与指针的区别:

(1).句柄其实就是指针,但是他和指针最大的不同是:给你一个指针,你可以通过这个指针做任何事情,也许是好事,也许是通过这个指针破坏内存,干一些捣乱的事情。这个我想大家都会碰到过,因为乱用指针可能会导致程序崩溃。
句柄就没有这个缺点,通过句柄,你只能干一些windows允许你干的事情(例如调用一些api函数等等),没有了指针的随意。

(2).句柄是一些表的索引也就是指向指针的指针。 句柄和指针都是地址,句柄是windows编程的一个关键性的概念,编写windows应用程序总是要和各种句柄打交道。
所谓句柄,就是一个唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷等。在win32里,句柄是指向一个“无类型对象”(void)的指针,也就是一个4字节长的数据。
无论它的本质是什么,句柄并不是一个真正意义上的指针。
从构造上看,句柄是一个指针,尽管它没有指向用于存储某个对象的内存位置。事实上,句柄指向一个包含了对该对象进行引用的位置。
句柄的声明是这样的:
typedef void handle

由于windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。这些运行的程序称为一个实例。为了对同一程序的多个副本进行管理,windows引入了实例句柄。windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。

不同之处还在于:
1、句柄所指的可以是一个很复杂的结构,并且很有可以是与系统有关的,比如说上面所说的线程的句柄,它指向的就是一个类或者结构,他和系统有很密切的关系,当一个线程由于不可预料的原因而终止时,系统就可以回收它所占用的资源,如cpu,内存等等。反过来想可以知道,这个句柄中的某一些项,是与系统进行交互的。由于windows系统是一个多任务的系统,它随时都可能要分配内存,回收内存,重组内存等。 
2、指针它也可以指向一个复杂的结构,但是通常是用户定义的,所有的必需的工作都需用户完成,特别是在删除的时候。 但在vc++6.0中也有一些指针,它们都是在处理一些小问题才用的,如最常见的字符的指针 它也是需要用户处理的,譬如你动态分配了内存;但是cstring就不要用户处理了,它其实是vc++中的一个类,所有的操作都由成员函数完成,产生(分配)由构造函数,删除(回收)由析构函数完成。

补充知识:指针和句柄之间的转换

a.由指针获得句柄 
      CWND* pwnd ;
      HWND  hwnd ;
      hwnd = pwnd-> GetSafeHwnd();

b.由句柄得到指针:
      CWND* pwnd = FromeHandle(hmyhandle);
      pwnd-> SetWindowText(" hello world!" ) ;

mfc类中有的还提供了标准方法,比如window 句柄 : 
static CWND pascal FromHandle( HWND hwnd )
HWND GetSafeHwnd( ) const

getdc函数对系统的相对开销比较大,如果你的程序里使用了几百个getdc函数而又不通过ReleaseDC函数释放的话,那你机器运行速度将是龟速。

Attach在于将HDC与CDC的对象关联起来,并且在Map表中创建一条记录

Detach在于将HDC与CDC的对象去除关联,当然会在Map表中删除这条记录

另外:

函数功能:该函数确定给定的窗口句柄是否标识一个已存在的窗口。

函数原型:BOOL IsWindow(HWND hWnd);

句柄即GetSafeHwnd的作用相关推荐

  1. 句柄的意义和作用以及句柄和指针的区别

    句柄 什么是句柄?首先这个单词听起来就有点怪,只知道有把柄,句柄对应单词是handle,把手,一个门把手可以打开一扇房间的门,句柄是一个特殊的代号,windonw系统可以通过一个特定的句柄打开一个特定 ...

  2. Windows句柄剖析

    1 什么是句柄 句柄的概念:     在系统中指向某个控件或对象的唯一指针(也可叫句柄),系统可以通过这个句柄与所对应的控件或对象交互(控制它).控件或对象与句柄的关系就好比电视机与遥控器,通过遥控器 ...

  3. Matlab中的函数句柄@

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50699990 @是Matlab中的句柄 ...

  4. mfc vs2013 项目怎么更改类名_VS2010 更改MFC标题及标题栏图标和exe图标

    标题及标题栏 图标和 exe 图标 在 VS2010 下新建一个 MFC 的多文档应用程序, 程序默认的标题是 " 文档名 - 工程名 " . 图标默认的是写着 MFC 的三个方块 ...

  5. Delphi中高级DLL的编写和调用

            根据Delphi提供的有关 DLL编写和调用的帮助信息,你可以很快完成一般的 DLL编写和调用的 应用程序.本文介绍的主题是如何编写和调用能够传递各种参数(包括对象实例)的 DLL.例 ...

  6. keybd_event跟SendMessage,PostMessage模拟键盘消息的区别 z

    首先你会发现keybd_event函数中是没有窗口句柄作为参数的,好奇的你一定会觉得很奇怪,那是因为,keybd_event是全局模拟按键的,只对前台窗口(即当前的活动窗口)才可以,但是如果模拟的按键 ...

  7. 关于Socket和IOCP的一些值得注意的地方

    关于Socket和IOCP的一些值得注意的地方 IOCP是一整套高性能的IO操作异步模型,可以用在文件操作也可以用在网络SOCKET操作上面.当用在网络SOCKET上时,在服务器端主要配合Aceept ...

  8. S3C2440中断跳转分析

    2440init.s中断跳转分析 最近准备自己写一个S3C2440的启动代码.参阅了一下2440init.s这一启动代码.发现有很多人对于这个启动代码中的异常,特别是像外部中断这样的异常,到底在244 ...

  9. keybd_event()使用方法

    keybd_event()使用方法 函数说明 函数功能:keybd_event函数模拟一次击键事件.系统可使用这种模拟的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理 ...

  10. 【逆向】【Part 3】DLL注入

    目录 一.通过自制调试器来理解其原理 1.调试器的工作原理 实现反汇编功能(重点) 重点分析exception_debug_event 重点:1.对调试器程序增加异常处理操作功能,核心API, CON ...

最新文章

  1. poj3692(二分图最大独立集)
  2. linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
  3. 【问链-区块链基础知识系列】 第十四课 数字货币交易所的前世、今生和未来(一)
  4. 关于HTTPS认证,这里解决你所有疑惑
  5. node mysql查询回调_nodejs 数据库查询回调问题
  6. 【云计算】Kubernetes、Marathon等框架需要解决什么样的问题?
  7. javascript 权威指南二
  8. 「微信小程序」有哪些冲击与机会?
  9. 前中后序遍历的递归与非递归算法,层序遍历
  10. 超级计算机运存多少,6GB内存到底能开多少个APP?实测告诉你最终答案
  11. Android ROM开发(一)——Windows下Cygwin和Android_Kitchen厨房的安装
  12. 认识客观世界:数学描述与物理意义
  13. 远程办公常态化,网络安全迫在眉睫,“零信任安全”的风口到了吗?
  14. 副校长仇旻解密神秘的西湖大学 AI布局有何不同
  15. 掌握JavaScript中的迭代器和生成器,顺便了解一下async、await的原理
  16. Matlab中N是什么意思,MATLAB中y=FFT(X,N)中的N是什么意思
  17. JAVA高考加油,给高考学子加油打气的祝福语
  18. 痞子衡嵌入式:嵌入式里通用微秒(microseconds)计时函数框架设计与实现
  19. OGEM Bentonite mud treatment system for Russian client
  20. XP系统中转移“我的文档”文件夹到其它分区

热门文章

  1. d3.js——饼状图
  2. login RPi via serial port
  3. apache lucene介绍
  4. 简单的方法完成项目上传到github
  5. linux root权限_怎样在Linux内核中埋炸弹获取root权限lt;2/2gt;终结篇
  6. 无法保存关闭文件 苹果电脑 显示正在保存_??Linux文件编辑 - 给你骨质唱疏松
  7. Layui 数据表格复杂表头
  8. Mysql将多个查询结果并列显示
  9. securecrt批量登录linux,SecureCRT批量配置使用会话key
  10. centos7安装mysql5.7.16_centos7.x编译安装mysql5.7.16