我有一个MFC对话框,其中包含十几个按钮,单选按钮和只读编辑控件。
我想知道用户何时在该对话框中按Ctrl + V,无论哪个控件都有焦点。
如果这是C#,我可以设置KeyPreview
proprety,我的表单将在各个控件之前接收所有键击 - 但是我如何在MFC对话框中执行此操作?
答案 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结构的详细信息。一定要调用基类来获得正确的返回值,除非你想吃掉击键以防止它进一步发展。