HWND是Windows系统中对所有窗口的一种标识,即窗口句柄。这是一个SDK概念。   
CWnd是MFC类库中所有窗口类的基类。微软在MFC中将所有窗口的通用操作都封装到了这个类中,如:ShowWindow等等,同时它也封装了窗口句柄即m_hWnd成员。

由HWnd得到CWnd*:
CWnd wnd;
HWnd hWnd;
wnd.Attach(hWnd);
通常一个窗口资源已经和一个CWnd类的对象关联起来的,由于一般来说这个类是自己创建的,所以自然知道怎么得到指向这个类的指针。如果没有就创建一个CWnd对象,将这个对象与窗口资源的hWnd句柄关联起来。(如上边的语句)。如果用
static CWnd*   CWnd::FromHandle(HWND   hWnd) ;
则返回值是一个暂时的CWnd对象,并且我们确保返回值为非空,也就是hWnd是有效的。 
static CWnd*   CWnd::FromHandlePermanent(HWND   hWnd)  ;
返回的是一个永久的对象。只有在返回的CWnd在类表里已经存在是返回值为非空。

由CWnd获取HWnd就容易多了,因为它的一个成员m_hWnd就是所对应窗口的句柄。
wnd->m_hWnd。
 ——————————————————————————————————————————————————————————

CWnd* 和 HWND 差别很大

HWND 是 SDK 定义的类型, 是一个无确切意义的 32-bit 值,在调用 API 时用于指代窗体。

CWnd* 是一个有确切意义的指针,指向一个 MFC 窗体类 CWnd 的实例。因为 MFC 对 SDK 做了封装,大部分调用都可以用 CWnd* 作为参数,所以很容易混淆。从一个 CWnd* 获取句柄的方法是 pWnd->GetSafeHwnd(), 他比 pWnd->m_hWnd 安全,因为前者在 pWnd == NULL 的时候返回 NULL 而后者出现 access violation

从 hWnd 转换到 CWnd * 一个可以使用的方法是 CWnd::FromHandle
CWnd *pTempWnd = CWnd::FromHandle(hWnd); // 如果 hWnd 存在对应的 CWnd* ,则返回其指针,否则,创建一个 MFC 临时窗体并返回其指针。
注意这个函数会返回临时窗体的指针,如果需要更安全,调用 CWnd::FromHandlePermanent ,他在不存在对应的 CWnd* 时返回 NULL。

——————————————————————————————————————————————————————————

CWnd是MFC的窗口基类。 HWND是Windows窗口句柄。 前者是一个C++对象,后者是一个类似于指针地址的数字型对象。
CWnd可以看成是对Windows窗口操作的封装,而封装的核心就是使用Windows窗口句柄(即HWND)来操作窗口.

CWnd可以通过CWnd::GetSafeHwnd()或成员变量m_hWnd来获得该窗口对象的HWND窗口句柄。
HWND可以通过CWnd的静态函数:CWnd::FromHandle()由句柄实例化一个CWnd对象出来。

——————————————————————————————————————————————————————————

1: SDK函数
 
定义

HWND GetDlgItem(HWND hDlg, int nIDDlgItem);

参数

hDlg

指定对话框的窗口句柄。

nIDDlgItem

控件的标识符(ID)。

返回值

如果函数调用成功,返回值为指定控件的窗口句柄。如果函数调用失败,返回值为 NULL ,表示无效的对话框句柄或者指定控件不存在。要获取更多错误信息,请调用 GetLastError 函数。

说明

使用该函数时,你可以指定任何窗口,而不只是对话框窗口,只要 hDlg 指定的是一个父窗口并且子窗口具有标识符(在调用 CreateWindow 或 CreateWindowEx 函数创建子窗口时通过 hMenu 参数设置),GetDlgItem 将返回一个有效的子窗口句柄。

例如:(调用形式采用如下的方式来调用,而且两个参数的是在平台SDK中调用的)

::GetDlgItem(this->m_hWnd,IDC_XXXX_SIZE); //this->m_hWnd指的是某个窗口的句柄, IDC_XXX_SIZE是你需要动作的某个控件ID

2: 类成员函数

定义

CWnd::GetDlgItem(int nID)

例如: (CWnd::GetDlgItem(int nID)在窗口中调用)

GetDlgItem(IDC_v1)->ShowWindow(SW_HIDE);
 GetDlgItem(IDC_v2)->ShowWindow(SW_HIDE);
 GetDlgItem(IDC_v3)->ShowWindow(SW_HIDE);

CWnd指针和HWnd相关推荐

  1. 实例1.1:通过HWND获得CWnd指针

    //获得当前窗口的句柄HWND hWnd = GetSafeHwnd();//通过HWND获得CWnd指针CWnd *pWnd = CWnd::FromHandle(hWnd);CString str ...

  2. VC学习笔记:简单绘图

    VC学习笔记:简单绘图 SkySeraph Oct.29th 2009  HQU Email-zgzhaobo@gmail.com  QQ-452728574 Latest Modified Date ...

  3. MFC的CWnd和HWND之间互相转换方法

    句柄是一个32位的数,是在WINDOS中的一个资源标示符,相当于c里面的指针. 窗口类就是CWnd,窗口句柄就是HWND.CWnd和HWND之间互相转换代码如下:     CWnd *pWnd;    ...

  4. CWnd与HWND的区别与转换

    一.区别 HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是m_hWnd. HWND是Windows系统中对所有窗口的一种标识,即窗口句柄.这是一个SDK概念.    CWn ...

  5. CWND和HWND之间的关系和转换 和获取方法

    CWnd与HWND的区别 一.区别 HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是m_hWnd. HWND是Windows系统中对所有窗口的一种标识,即窗口句柄.这是一个 ...

  6. CWnd与HWND的区别与联系(相互转换)完全解析

    区别 首先,从这两个单词的第一个字母即可知道两者之间的差别.熟悉MFC的人都知道在MFC中,类基本上都是以C开头的,这是一种规则约定,目的就是让人一看就知道它是一个类! 因此,CWnd第一个字母C指的 ...

  7. CWnd与HWND的区别与转换 如何获取本窗体对象

    一.区别 HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是m_hWnd. HWND是Windows系统中对所有窗口的一种标识,即窗口句柄.这是一个SDK概念.   CWnd ...

  8. HINSTANCE/HWND/CWnd/HANDLE 的区别

    HINSTANCE是应用程序实例句柄, HWND是窗口对象句柄, HANDLE是任意对象的句柄, CWnd是MFC中的窗口类. MSDN里面对于HINSTANCE的解释是"handle   ...

  9. CWnd 对象怎么和 HWND 窗口句柄相互转化

      CWnd   *wnd;     HWND   hWnd;         它们怎么相互转换? 1.wnd->m_wnd;     2.CWnd   *wnd=CWnd::FromHandl ...

最新文章

  1. C#零碎知识点笔记(容易混淆的一些点)
  2. Windows下Redis中RedisQFork位置调整
  3. SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践
  4. mysql主机咋填_mysql数据库主机填什么
  5. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点
  6. 推荐系统遇上深度学习(四)--多值离散特征的embedding解决方案
  7. 用异或的性质实现简单加密解密
  8. 计算机应用与技术大赛,关于举办2017年燕山大学第一届计算机应用技术与程序设计大赛的通知...
  9. 贺利坚老师汇编课程39笔记:用于内存寻址的寄存器同时引入BP
  10. Broken Keyboard(悲剧文本)
  11. VOC2007和COCOmAP计算
  12. 上海大华条码称代码_上海大华计价电子秤 使用软件 TM-H 大华条码称设置15KG
  13. netperf测试最大连接数
  14. 标准盒子模型简单讲解
  15. window设置oracle sid,window下改oracle_sid
  16. java魂斗罗zip_魂斗罗rom
  17. 漫画:国内都有哪些程序员大牛?
  18. 30秒教会您Orange一键资源采集功能
  19. 安卓手机上最好的3个epub阅读器
  20. Dedecms TAG中文标签改成英文+数字地址的方法

热门文章

  1. python的字符串、列表、元组、字典、集合
  2. IE浏览器下载文件名出现中文乱码问题解决
  3. Bmob的使用iOS版
  4. 全球茶叶产量、消费量及进出口贸易分析:中国茶叶产量全球排名第一[图]
  5. [转]热电偶与热电阻的区别[2]
  6. 网游行业联合运营问题研究
  7. Google安全浏览算法更新:屡教不改的站点将被屏蔽30天
  8. java中文域名转码
  9. 运行vue项目报DONE Build complete. The dist directory is ready to be deployed.解决办法
  10. 计算机字符格式化集体备课教案,有序备课:集体备课中不要忘记个性化备课