gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:18:40 25 4
gpt4 key购买 nike

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

afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();

现在我期望:当用户单击“左键”时,我可以将“左键单击”打印到日志文件中,当用户单击“取消按钮”时,我可以将“取消按钮单击”打印到日志文件中。我知道我可以在每个回调函数中做到这一点。喜欢:

void LoginDialog::OnBnClickedOk()
{
printToLog("Left Button click");
}

但问题是,这个应用非常庞大,至少有几百个回调函数。我不能将这个“printToLog”函数放在每个回调函数中。因此,是否有一个函数可以接收所有这些生成的窗口消息?如果有这样的函数,我可以在那个回调函数中添加我的 printToLog 函数。我在网上搜索,https://msdn.microsoft.com/en-us/library/windows/desktop/ms632593(v=vs.85).aspx但是这个链接里的东西不是我需要的。我不能过多地修改现有代码。

最佳答案

您需要重载窗口类的 PreTranslateMessage()。它是 CWnd 的虚函数。

步骤:

  1. 在rc文件中右击你的窗口
  2. 点击类向导
  3. 在弹出的对话框中,切换到Virtual Functions标签,搜索PreTranslateMessage
  4. 选择函数,点击对话框右侧的Add Function按钮
  5. 在添加的函数中处理消息

看起来像:

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

return CDialogEx::PreTranslateMessage(pMsg);
}

关于c++ - 如何获取从同一应用程序生成的所有 Windows 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41559765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com