2014-04-04 56 views
0

爲什麼Windows中的某些功能需要參數pWnd,而其他功能需要參數HWND?例如:Windows編程:pWnd和HWND的區別

// Get a dc for a CWnd object pointer. 
CPaintDC dc(pWnd); 
// Send my private massage. 
::SendMessage(pWnd->m_hWnd, WM_MYMESSAGE, (LPARAM) &dc.m_ps, 0); 

其實,爲什麼Windows系統有兩種類型pWndHWND

由於HWND可以通過pWnd->m_hWnd獲得,該功能可以隨時總是可以pWnd作爲參數。背後的設計理念是什麼?

+0

我的猜測(和它只是一個猜測)是一些採用HWND的API首先出現並保持向後兼容。後來的API使用pWnd構造,它封裝了HWND,但也提供了更多信息。 –

+4

第一個函數是MFC特定的,因此它可能需要MFC特定的參數。第二個不是MFC函數,所以它不能。 –

+0

順便說一句,你可以使用一個CWnd封裝器來發送消息,像這樣:'pWnd-> SendMessage(WM_MYMESSAGE,(LPARAM)&dc.m_ps,0);' – cha

回答

7

在Windows中沒有一個功能需要CWnd*(您可以稱其爲pWnd)。 Windows(特別是,user32.dll)專門使用HWND來識別窗口對象。

class CWnd是MFC的一部分,它是建立在Windows之上的C++庫。只有使用MFC編寫的MFC和類以及函數纔會知道它是什麼。

(再有就是現代的UI以前知名-AS-地鐵,它具有以上都不是,它不使用user32.dll無論是。但這是另一個話題。)

相關問題