在MFC中,在向导生成的WindowProc中,如何确定消息发件人的窗口句柄?

问题描述

我有一个原始的MFC应用程序,最初是用Visual C ++ 6编写的。我需要对其进行一些小的更改,但是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中它在哪里?

编辑:谢谢雷蒙德和马克。我发现我误解了它的工作原理。

解决方法

此信息不可用。标准窗口过程中的第一个参数是 receiver ,而不是发送方。这也很有意义,因为SendMessagePostMessage通过窗口句柄来标识接收者。另一方面,发件人可以是任何线程,包括不拥有任何窗口的线程。

如果您需要在接收消息的代码中标识消息的发送者,则必须显式传递ID。当跨越过程边界时,您将必须封送任何引用的内存。系统不会对自定义消息执行此操作。