C++ 如何获取从同一应用程序生成的所有windows消息?

C++ 如何获取从同一应用程序生成的所有windows消息?,c++,mfc,windows-messages,C++,Mfc,Windows Messages,例如,我现在有一个MFC应用程序。用户可以单击用户名文本字段,然后输入用户名。然后用户可以单击密码文本字段,然后输入密码。然后用户可以点击登录按钮。 在MFC应用程序中,VS 2013将为我生成相应的回调函数,如下所示: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel(); 现在我希望: 当用户点击“左键”时,我可以将“左键点击”打印到日志文件中,当用户点击“取消按钮”时,我可以将“取消按钮点击”打印到日志文件中。 我知

例如,我现在有一个MFC应用程序。用户可以单击用户名文本字段,然后输入用户名。然后用户可以单击密码文本字段,然后输入密码。然后用户可以点击登录按钮。 在MFC应用程序中,VS 2013将为我生成相应的回调函数,如下所示:

afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
现在我希望: 当用户点击“左键”时,我可以将“左键点击”打印到日志文件中,当用户点击“取消按钮”时,我可以将“取消按钮点击”打印到日志文件中。 我知道我可以在每个回调函数中这样做。 比如:

但问题是,这个应用程序非常大,它至少有数百个回调函数。我不能将这个“printToLog”函数放在每个回调函数中。 因此,是否有一个函数可以接收所有这些生成的windows消息?如果有这样一个函数,我可以在这个回调函数中添加printToLog函数。 我在网上搜索,
但是这个链接中的东西不是我需要的。我无法过多地修改现有代码。

您需要重载window类的
PreTranslateMessage()
。它是
CWnd
的一个虚拟函数

步骤:

  • 右键单击rc文件中的窗口
  • 单击
    类向导
  • 在弹出对话框中,切换到
    虚拟功能
    选项卡,并搜索
    预翻译消息
  • 选择功能,然后单击对话框右侧的添加功能按钮
  • 在添加的函数中处理消息
  • 它看起来像:

    BOOL CEventFilterDlg::PreTranslateMessage(MSG* pMsg)
    {
        // TODO: Add your specialized code here and/or call the base class
    
        return CDialogEx::PreTranslateMessage(pMsg);
    }
    

    我如何知道该功能单击了哪个按钮或单击了哪个文本字段?我的意思是,我们是否可以使用“pMsg”来判断单击了哪个按钮?您应该看到
    MSG
    的定义,请查看。我看到了。在MSG中,它有一个名为“message”的参数。这一个可以识别键盘输入或鼠标输入,这意味着它可以判断它是否为WM_LBUTTONDOWN,但它不能判断BN_单击。没关系,我知道如何从这个链接获得它:也许你应该解释需要打印代码中每个处理程序的消息。出于某种原因,这似乎有些过头了。
    BOOL CEventFilterDlg::PreTranslateMessage(MSG* pMsg)
    {
        // TODO: Add your specialized code here and/or call the base class
    
        return CDialogEx::PreTranslateMessage(pMsg);
    }