CWnd与HWND的区别与转换

本文详细解释了MFC中的CWnd类与Windows句柄HWND的区别,介绍了如何在MFC应用程序中获取窗口对象指针和窗口句柄,以及它们之间的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


2011-10-20 10:29:30|  分类: VC学习库|举报|字号 订阅

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

二、如何得到窗口对象指针CWnd * pCWnd
1,在窗体里,直接用 this->,//this就是本窗体的窗口对象指针
2,主窗体的类对象指针:AfxGetApp()->m_pMainWnd->,  //AfxGetApp()->m_pMainWnd就是主窗体的窗口对象指针
3,pCWnd=GetDlgItem(ID_EDIT_NAME);//GetDlgItem 函数可以得到某个
控件的窗口对象指针

三、如何得到窗口句柄 HWND Handle
1,Handle=this->m_hWnd
2,GetDlgItem(ID_EDIT_NAME);
3,Handle=::GetDlgItem(this,IDC_STATIC_MODE); //得到本窗体内某个控件的句柄

四、转换
CWnd * pCWnd;
HWND Handle;
pCWnd=FromHandle(Handle);
Handle=GetSafeHwnd(pCWnd);




--------------------------------------------------

CWnd类提供了微软基础类库中所有窗口类的基本功能。
CWnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数和析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd的虚拟析构函搜索数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象。
CWnd类和消息映射机制隐藏了WndProc函数。接收到的Windows通知消息通过消息映射被自动发送到适当的CWnd OnMessage成员函数。你可以在派生类中重载OnMessage成员函数以处理成员的特定消息。
CWnd类同时还使你能够为应用程序创建Windows的子窗口。先从CWnd继承一个类,然后在派生类中加入成员变量以保存与你的应用程序有关的数据。在派生类中实现消息处理成员函数和消息映射,以指定当消息被发送到窗口时应该如何动作。
你可以经过两个步骤来创建一个子窗口。首先,调用构造函数CWnd以创建一个CWnd对象,然后调用Create成员函数以创建子窗口并将它连接到CWnd对象。
当用户关闭你的子窗口时,应销毁CWnd对象,或者调用DestroyWindow成员函数以清除窗口并销毁它的数据结构。
在微软基础类库中,从CWnd派生了许多其它类以提供特定的窗口类型。这些类中有许多,包括CFrameWnd,CMDIFrameWnd,CMDIChildWnd,CView和CDialog,被用来进一步派生。从CWnd派生的控件类,如CButton,可以被直接使用,也可以被进一步派生出其它类来。

#include <afxwin.h>

请参阅:CFrameWnd, CView

CWnd类的成员 初始化 对话框项函数 初始化消息处理函数  
窗口状态函数 数据绑定函数 系统消息处理函数  
窗口大小和位置 菜单函数 一般消息处理函数  
窗口访问函数 工具提示函数 控件消息处理函数  
更新/绘图函数 定时器函数 输入消息处理函数  
坐标映射函数 警告函数 非客户区消息处理函数  
窗口文本函数 窗口消息函数 MDI消息处理函数  
滚动函数 剪贴板函数 剪贴板消息处理函数  
拖放函数 OLE控件 菜单循环通知  
插字符号函数 可重载函数  

数据成员 m_hWnd 指明与这个CWnd对象相关联的HWND句柄  

构造和析构 CWnd 构造一个CWnd对象  
DestroyWindow 销毁相关联的Windows窗口  

初始化 Create 创建并初始化与CWnd对象相关联的子窗口  
PreCreateWindow 在与CWnd对象相关联的窗口被创建之前调用  
CalcWindowRect 调用这个函数以计算窗口客户区的矩形  
GetStyle 返回当前的窗口风格  
GetExStyle 返回窗口的扩展风格  
Attach 将Windows句柄与CWnd对象相连接  
Detach 将一个Windows句柄从CWnd对象上分离并返回这个句柄  
PreSubclassWindow 在调用SubclassWindow之前,允许其它必要的子类化工作  
SubclassWindow 将窗口与CWnd对象相连接,并使它通过CWnd的消息映射转发消息  
UnsubclassWindow 将窗口与CWnd对象分离  
FromHandle 当给定一个窗口的句柄时,返回CWnd对象的指针。如果没有CWnd对象与这个句柄相连接,则创建一个临时的CWnd对象并与之相连接  
FromHandlePermanent 当给定一个窗口的句柄时,返回CWnd对象的指针。如果没有CWnd 对象与这个句柄相连接,则返回NULL  
DeleteTempMap CWinApp的空闲处理函数自动调用这个函数,清除由FromHandle创建的任何临时CWnd对象  
GetSafeHwnd 返回m_hWnd,如果该指针为NULL,则返回NULL  
CreateEx 创建一个Windows的可重叠窗口、弹出窗口或子窗口,并把它连接到一个CWnd对象上  
CreateControl 创建一个OLE控件,该控件在MFC程序中由一个CWnd对象代表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值