为什么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会同时具有pWnd
和HWND
两种类型?
由于HWND
可以通过pWnd->m_hWnd
获取,因此函数始终可以将pWnd
作为参数。它背后的设计理念是什么?
答案 0 :(得分:7)
Windows中没有一个功能采用CWnd*
(您称之为pWnd
)。 Windows(特别是user32.dll
)专门使用HWND
来标识窗口对象。
class CWnd
是MFC的一部分,MFC是一个基于Windows构建的C ++库。只有MFC以及使用MFC编写的类和函数才能知道它是什么。
(然后有现代用户界面以前称为Metro,它没有上述内容。它也没有使用user32.dll
。但这是另一个话题。)