未触发MFC CFormView OnKeyDown事件

时间:2013-11-25 13:42:42

标签: c++ events mfc messages

我有一个CFormView,我有一些控件。我在我的CFormView上实现了一个OnKeyDown事件。一切都很好,除了我的事件从未被触发,因为焦点在我的CFormView中的组合框上。我不希望组合框接收事件。我希望CFormView接收它。所以我实现了PreTranslateMessage(MSG * pMsg),它从组合框中删除了该事件,但它从未将它提供给CFormView。这是代码:

BOOL CfinalprojView::PreTranslateMessage(MSG* pMsg) { 
if( pMsg->message == WM_KEYDOWN ) {
    SendMessage( WM_COMMAND, MAKEWPARAM( IDD_FINALPROJ_FORM, BN_CLICKED ), ( LPARAM )0 );
    return TRUE; 
} else if( pMsg->message == WM_KEYUP ) {
    return TRUE; 
} else {
    return CFormView::PreTranslateMessage( pMsg );
}}

我做错了什么?

提前谢谢你,

科尔内留

1 个答案:

答案 0 :(得分:1)

因此,似乎没有办法将关键事件转发到CFormView。相反,可以捕获PreTranslateMessage(MSG * pMsg)中的事件并检查按下的键,如下所示:

BOOL CfinalprojView::PreTranslateMessage(MSG* pMsg) {
    if( pMsg->message == WM_KEYDOWN ) {
        if( pMsg->wParam == VK_DELETE ) {
            ...
        }
        return TRUE; 
    }
    else if( pMsg->message == WM_KEYUP )
        return TRUE; 
    else
        return CFormView::PreTranslateMessage( pMsg );
}