让我的MFC对话框在其控件之前接收击键事件(MFC / Win32相当于WinForms“KeyPreview”)

时间:2009-09-03 08:47:30

标签: windows mfc winapi dialog

我有一个MFC对话框,其中包含十几个按钮,单选按钮和只读编辑控件。

我想知道用户何时在该对话框中按Ctrl + V,无论哪个控件都有焦点。

如果这是C#,我可以设置KeyPreview proprety,我的表单将在各个控件之前接收所有键击 - 但是我如何在MFC对话框中执行此操作?

2 个答案:

答案 0 :(得分:3)

JTeagle是对的。您应该覆盖PreTranslateMessage()

// Example
BOOL CDlgFoo::PreTranslateMessage( MSG* pMsg )
{
  // Add your specialized code here and/or call the base class
  if ( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN )
  {
    int idCtrl= this->GetFocus()->GetDlgCtrlID();
    if ( idCtrl == IDC_MY_EDIT ) {
      // do something <--------------------
      return TRUE; // eat the message
    }
  }

  return CDialog::PreTranslateMessage( pMsg );
}

答案 1 :(得分:2)

添加一个处理程序以覆盖对话框类中的PreTranslateMessage(),并检查在那里收到的MSG结构的详细信息。一定要调用基类来获得正确的返回值,除非你想吃掉击键以防止它进一步发展。