让我的MFC对话框在其控件(WinForms“KeyPreview”的MFC / Win32等价物)之前接收按键事件

我有一个包含十几个button,单选button和只读编辑控件的MFC对话框

我想知道用户在该对话框中何时点击Ctrl + V,而不pipe哪个控件具有焦点。

如果这是C#,我可以设置KeyPreview属性,我的表单将在单独的控件之前收到所有击键 – 但是如何在MFC对话框中这样做呢?

J Teagle是对的。 你应该重写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 ); } 

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