当前位置: 代码迷 >> 综合 >> CWnd*和HWND区别
  详细解决方案

CWnd*和HWND区别

热度:68   发布时间:2024-01-16 03:19:34.0
CWnd*和HWND区别
2008-10-04 19:47

CWnd*HWND差别很大  

   

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

   

CWnd*是一个有确切意义的指针,指向一个MFC窗体类CWnd的实例。因为MFCSDK做了封装,大部分调用都可以用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