【发布时间】:2021-01-15 16:29:02
【问题描述】:
我有一个最初用 Visual C++ 6 编写的旧版 MFC 应用程序。我需要对其进行一些小改动,但 MFC 对我来说是一个黑盒子。
这个显然是由向导生成的函数来处理消息
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch (message)
{
case WM_CLOSE:
...;
...
etc.
}
对于某些消息,我需要获取发送者窗口句柄(来自不同的进程)。在 Windows API 中,标准 WindowProc 将此句柄作为第一个参数,但在 MFC 中它在哪里?
编辑:谢谢雷蒙德和马克。我发现我误解了它的工作原理。
【问题讨论】:
-
WndProc 的第一个参数不是发送者句柄。它是接收器句柄。未提供发件人句柄,尽管某些消息(如 WM_COMMAND)具有在额外参数之一中传递发件人的约定。
-
消息的发送者甚至不需要窗口句柄。任意代码都可以调用
SendMessage。 -
知道发送方窗口句柄的唯一方法是它是否以某种方式编码在 WPARAM 或 LPARAM 参数中……例如 WN_NOTIFY 消息中的 NMHDR* 指针。否则,谁知道呢?正如 Mark 所说,发送者甚至不需要窗口句柄。