我有一个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 );
}}

我究竟做错了什么?

先感谢您,

科尼留

最佳答案

因此,似乎没有办法将关键事件转发到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 );
}

关于c++ - MFC CFormView OnKeyDown事件未触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20194642/

10-11 20:40