C++ 如何获取从同一应用程序生成的所有windows消息?
例如,我现在有一个MFC应用程序。用户可以单击用户名文本字段,然后输入用户名。然后用户可以单击密码文本字段,然后输入密码。然后用户可以点击登录按钮。 在MFC应用程序中,VS 2013将为我生成相应的回调函数,如下所示:C++ 如何获取从同一应用程序生成的所有windows消息?,c++,mfc,windows-messages,C++,Mfc,Windows Messages,例如,我现在有一个MFC应用程序。用户可以单击用户名文本字段,然后输入用户名。然后用户可以单击密码文本字段,然后输入密码。然后用户可以点击登录按钮。 在MFC应用程序中,VS 2013将为我生成相应的回调函数,如下所示: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel(); 现在我希望: 当用户点击“左键”时,我可以将“左键点击”打印到日志文件中,当用户点击“取消按钮”时,我可以将“取消按钮点击”打印到日志文件中。 我知
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
现在我希望:
当用户点击“左键”时,我可以将“左键点击”打印到日志文件中,当用户点击“取消按钮”时,我可以将“取消按钮点击”打印到日志文件中。
我知道我可以在每个回调函数中这样做。
比如:
但问题是,这个应用程序非常大,它至少有数百个回调函数。我不能将这个“printToLog”函数放在每个回调函数中。
因此,是否有一个函数可以接收所有这些生成的windows消息?如果有这样一个函数,我可以在这个回调函数中添加printToLog函数。
我在网上搜索,
但是这个链接中的东西不是我需要的。我无法过多地修改现有代码。您需要重载window类的
PreTranslateMessage()
。它是CWnd
的一个虚拟函数
步骤:
类向导
虚拟功能
选项卡,并搜索预翻译消息
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);
}