如何从同一个应用程序生成所有Windows消息?

时间:2017-01-10 01:26:16

标签: c++ mfc windows-messages

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

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

现在我期待: 当用户点击“左键”时,我可以将“左键单击”打印到日志文件,当用户点击“取消键”时,我可以将“取消键点击”打印到日志文件中。 我知道我可以在每个回调函数中执行此操作。 像:

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

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

1 个答案:

答案 0 :(得分:1)

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

步骤:

  1. 右键单击rc文件中的窗口
  2. 点击Class Wizard
  3. 在弹出式对话框中,切换到Virtual Functions标签,然后搜索PreTranslateMessage
  4. 选择功能,然后点击对话框右侧的Add Function按钮
  5. 处理添加功能中的消息
  6. 看起来像:

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