當我們想得到一個窗口對象(CWnd的派生對象)指針的句柄(HWND)時,最安全的方法是使用GetSafeHwnd()函數,通過下面的例子來看其理由:
CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器
HWND hwnd = pwnd-> m_hwnd; //得到它的HWND
這樣的代碼當開始得到的pwnd爲空的時候就會出現一個“General protection error”,並關閉應用程序,一般不能對一個NULL指針訪問其成員,如果用下面的代碼:
CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器
HWND hwnd = pwnd-> GetSafeHwnd(); //得到它的HWND
就不會出現問題,因爲儘管當pwnd是NULL時,GetSafeHwnd仍然可以用,只是返回NULL,通過GetSafeHwnd()的實現代碼就更清楚了:
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{
return this == NULL?NULL:m_hWnd;
}
實例如下,獲取記事本的句柄,併發送鍵盤消息:
報告題寫內容後的記事本文件: