本文主要是介绍CWnd与HWND的区别与联系(相互转换)完全解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
区别
首先,从这两个单词的第一个字母即可知道两者之间的差别。熟悉MFC的人都知道在MFC中,类基本上都是以C开头的,这是一种规则约定,目的就是让人一看就知道它是一个类!
因此,CWnd第一个字母C指的是class的意思,即CWnd是一个类;HWND第一个字母H指的是handle的意思,即HWND是一个句柄。
CWnd:是MFC类库中所有窗口类的基类。MFC将所有窗口的通用操作都封装到CWnd类中,如MoveWindow、ShowWindow;同时,它也封装了窗口句柄,即m_hWnd成员。
HWND:即Windows窗口句柄,是Windows系统中对所有窗口的一种唯一标识。
聪明的读者可以发现,CWnd其实就是MFC中的一个类名;而HWND是Windows中窗体句柄的类型,一个类似于指针地址的数字型对象。
联系(相互转换)
1、由HWND得到CWnd:
方法一:通过CWnd的Attach()函数来获取
CWnd wnd;HWND hWnd;wnd.Attach(hWnd);
CWnd的Attach()函数的作用基本上就是包一个句柄附加到一个MFC的对象上,即将CWnd对象的HWND成员指向这个窗口句柄hWnd。
方法二:HWND可以通过CWnd的静态函数:CWnd::FromHandle()或CWnd::FromHandlePermanent(),由句柄实例化一个CWnd对象出来。
如果用FromHandle(),返回值是一个临时CWnd对象,并且我们确保返回值为非空,也就是hWnd是有效的。(函数声明如下:)
static CWnd* CWnd::FromHandle(HWND hWnd) ;
static CWnd* CWnd::FromHandlePermanent(HWND hWnd) ;
2、由CWnd获取HWnd:
方法一:从CWnd获取HWnd就容易多了,因为它的一个成员变量m_hWnd就是所对应窗口的句柄。
wnd->m_hWnd
方法二:也可以通过成员函数CWnd::GetSafeHwnd()来获得该窗口对象的HWND窗口句柄。
这篇关于CWnd与HWND的区别与联系(相互转换)完全解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!