如果这个函数的内部实现是这样:HWND CWnd::GetSafeHwnd(){
if(m_hWnd==NULL)
return NULL;
else return m_hWnd;
}
那么和直接return m_hWnd有什么区别吗? 反正m_hWnd为NULL的时候返回的也是m_hWnd的值。到底为什么要搞出GetSafeHwnd(),GetSafeHmenu()这样的一些函数来呢? 为了解决什么样的问题?谢谢!
if(m_hWnd==NULL)
return NULL;
else return m_hWnd;
}
那么和直接return m_hWnd有什么区别吗? 反正m_hWnd为NULL的时候返回的也是m_hWnd的值。到底为什么要搞出GetSafeHwnd(),GetSafeHmenu()这样的一些函数来呢? 为了解决什么样的问题?谢谢!
{ return this == NULL ? NULL : m_hWnd; }
它的实现是这样的吧
Returns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is used with a NULL CWnd pointer.
GetHwnd() 可能为空句柄。一般句柄的作用:转指针,确定发送消息目标。
空句柄转不了指针,当然发送目标也会失败啊。
pWnd->GetSafeHwnd();
我的理解是,在“CWnd is not attached to a window”时,这个对象指针即this是为NULL的,但是m_hWnd可能是不为NULL的。使用GetSafeHwnd()首先会判断对象是否可用,才会返回句柄m_hWnd.
微软并不是多此一举的行为
需要在其他线程判断窗口是否可用
if(!::IsWindow(pDlg->GetSafeHwnd()))
{
//一些窗口方法不可用
}
-----------
错值跟NULL是不一样的,因为别处认为NULL是错的。