窗口句柄、窗口类对象的关系
HWND hwnd;//窗口句柄
CWnd wnd;//窗口类对象
窗口类对象中有一个成员是窗口句柄。
窗口句柄,提供了窗口的一个标识,类似于指针的概念,每一个窗口都对应了一个窗口句柄作为其标识,通过句柄可以方便的从内存中索引到资源。窗口类的对象则是对应窗口类的一个实例化,在MFC程序中,通过子类对象访问类的函数时就不需要提供窗口句柄作为资源标识。
举例说明:
SDK编程中创建一个窗口首先要定义一个窗口句柄,然后调用API函数创建并显示窗口,此时需要向函数传递窗口句柄,具体如下:
HWND hwnd;
hwnd=::CreateWindowEx();
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
利用MFC开发程序时,在CWnd类中定义了一个类型为句柄的成员变量HWND m_hWnd, 类中有函数
HWND CreateWindowEx(DWORD dwExStyle, // extended window styleLPCTSTR lpClassName, // registered class nameLPCTSTR lpWindowName, // window nameDWORD dwStyle, // window styleint x, // horizontal position of windowint y, // vertical position of windowint nWidth, // window widthint nHeight, // window heightHWND hWndParent, // handle to parent or owner windowHMENU hMenu, // menu handle or child identifierHINSTANCE hInstance, // handle to application instanceLPVOID lpParam // window-creation data
);
利用MFC开发程序时,在CWnd类中定义了一个类型为句柄的成员变量HWND m_hWnd, 类中有函数其返回值为一个句柄,在函数体内部利用API函数CreateWindowEx来完成窗口的创建。将其返回值保存到m_hWnd中,在实例化一个对象CWnd wnd;
wnd.CreatEx(...);
wnd.ShowWindow(SW_SHOW);
wnd.UpdateWindow();
可见利用对象创建窗口不需要向函数传递窗口句柄资源。因为在CWnd中定义了一个成员变量m_hWnd,由它保存了这个窗口句柄,调用CreateWindowEx时把句柄保存到CWnd类中,
所以再次调用ShowWindow中就不用传递句柄。
这里需要声明一点此处的wnd对象并不是窗口,将窗口关闭的时候这个对象并没有销毁,仅仅是将句柄设置为NULL,对象和窗口生存周期之间没有必然联系,对象和窗口唯一联系的纽带是在类的内部有一个窗口句柄的成员变量,保存了相关窗口的句柄,所以当对象销毁的时候这个窗口是要销毁的。一般的说在执行到右大括号之前对象都是没有被销毁的,而此时若调用DestroyWindow则是销毁窗口
常用转换如下
指针->句柄:hWnd = pWnd->GetSafeHwnd();
ID->句柄:hWnd = ::GetDlgItem(hParentWnd, ID);
句柄->指针:pWnd = CWnd::FromHandle(hWnd);
ID->指针:pWnd = Cwnd::GetDlgItem();
指针->ID:ID = GetWindowLong(pWnd->GetSafeHwnd(), GWL_ID);
句柄->ID:ID = GetWindowLong(hWnd, GWL_ID);
窗口句柄、窗口类对象的关系相关推荐
- 窗口类、窗口类对象与窗口 三者之间关系
本文摘自孙鑫<VC++深入详解3.3.1> 3.3.1 三者之间关系 很多开发人员都将窗口类.窗口类的对象和窗口之间的关系弄混淆了.为了使读者能更好地理解它们之间的关系,下面我们将模拟C ...
- 基类对象与派生类对象的关系
点击打开原文链接 基类对象与派生类对象的使用关系 1. 派生类对象作为基类对象处理 由于派生类具有所有基类的成员,所以把派生类的对象赋给基类对象是合理的,不过要求这种继承方式必须是public方式.但 ...
- 基类与派生类对象的关系 派生类的构造函数
- 抽象类试验。定义一组具有继承关系的类。Shape(形状)类是一个抽象类,包含4个数据成员(坐标x,y,颜色c,图形对象g(Graphics类对象))
package Test5_1_zxj; import javax.swing.*; import java.awt.*; public abstract class Shape {// 抽象类试验. ...
- ndarray 与 array 的区别 关系,所以ndarray是一个类对象,而array是一个方法
ndarray 与 array 的区别 关系 置顶 wanglll* 2020-02-06 20:00:37 8455 已收藏 17 分类专栏: 数据分析 文章标签: numpy 版权 ndarr ...
- 类与对象的关系 java 1615134802
类与对象的关系 java 1615134802 对象的创建 演练 类与对象的关系
- Delphi面向对象学习随笔一:类与对象的关系
Delphi面向对象学习随笔一:类与对象的关系 作者:巴哈姆特 http://www.cnpack.org (转载请注明出处并保持完整) 工作几年了,总想做点总结,于是有了这篇东西,叫随笔吧呵 ...
- C#中什么是类,类和对象的关系,类的访问修饰符?
类以及类和对象的关系以及类的访问修饰符 一.类的概念: 二.类和对象的关系: 三.类的组成: 四.类的创建: 五.类的访问修饰符: 一.类的概念: 类是对于某一类对象的一个统称,类是对象的抽象化,对象 ...
- 面向对象类与对象的关系
1.面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能.行为 面向对象:将功能封装进对象,强调具备了功能的对象 面向对象是基于面向过程的 面向过程例子: 把大象 ...
最新文章
- 【camera-lidar-radar】基于卡尔曼滤波和扩展卡尔曼滤波的相机、激光雷达、毫米波雷达多传感器后融合
- 日本京都大学再次斩获诺贝尔奖,对比清华大学,究竟哪里有差距?
- 2018 年你需要知道的 11 个 JavaScript 库
- BugkuCTF-MISC题旋转跳跃
- 关于《精通Unix下C语言编程与项目实践》的试读策划
- 华为媒体服务器在哪个文件夹,plex媒体服务器地址
- js基础知识汇总08
- eXtremeComponents 分页列表
- 选择IT行业的自我心得,希望能帮助到各位!(一)
- vue 日期多选插件
- python的三种将整数转换成二进制的方法
- ios16隐藏的六个实用功能,你知道几个?
- 如何注册一个顶级域名?需要注意哪些事项?
- Latex各种箭号符号,以及在箭头上方添加字母等符号的方法
- 高性能服务器理论与计算化学,计算化学集群服务器简明使用指引-VLCC.PDF
- C++-实现matlab的cart2pol(OpenCV)
- 如何定制博客园的个人空间
- PHP 安装包 、文件 下载地址
- 推荐一款国产远程控制软件ToDesk,轻量级,不限速,开启云办公新模式
- Javascript:ES6-ES11(2)
热门文章
- html判断安装没安装qq,QQ6.1体验版怎么用?腾讯QQ6.1体验版本安装步骤(无须申请体验账号)...
- python scrapy request_Scrapy中的Request和日志分析|python基础教程|python入门|python教程...
- nexus 仓库类型_使用Nexus私服代理其他maven仓库(jitpack、jcenter)
- php判断是否为数字_PHP将英文数字转换为阿拉伯数字
- python英文语义角色标注_【顶会100秒】基于相似词计算的旅游词汇语义分析
- 嘉兴学院计算机专业最低录取分,嘉兴学院南湖学院计算机类专业2015年在广西理科高考录取最低分数线...
- 下载人脸认证助手_认证助手最新版
- bat窗口大小设置_Tomcat的JVM和连接数设置
- java对import语句_Java的import语句 - 不积跬步,无以至千里 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 光纤熔接盒盘线方法_【图文教程】光纤熔接技术的操作与技巧分享!