Windows编程:pWnd和HWND的区别

时间:2014-04-04 00:48:52

标签: windows visual-studio winapi visual-c++ mfc

为什么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作为参数。它背后的设计理念是什么?

1 个答案:

答案 0 :(得分:7)

Windows中没有一个功能采用CWnd*(您称之为pWnd)。 Windows(特别是user32.dll)专门使用HWND来标识窗口对象。

class CWnd是MFC的一部分,MFC是一个基于Windows构建的C ++库。只有MFC以及使用MFC编写的类和函数才能知道它是什么。

(然后有现代用户界面以前称为Metro,它没有上述内容。它也没有使用user32.dll。但这是另一个话题。)