2013-11-25 4 views
0

У меня есть CFormView, и у меня есть некоторые элементы управления. Я реализовал событие OnKeyDown на моем CFormView. Все хорошо, за исключением того, что мое событие никогда не срабатывает, потому что основное внимание уделяется комбинированной коробке в моем CFormView. Я не хочу, чтобы поле со списком получало событие. Я хочу, чтобы CFormView получил его. Поэтому я реализовал PreTranslateMessage (MSG * pMsg), и он удаляет событие из поля со списком, но никогда не дает его CFormView. Вот код:MFC CFormView Событие OnKeyDown не активировано

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); 
}} 

Что я делаю неправильно?

Спасибо заранее,

Корнелиу

+0

Почему вы не хотите поле со списком, чтобы обработать событие? – rrirower

+0

Потому что я хотел бы нарисовать материал на CFormView, когда пользователь нажимает на клавиши. – corneliu

+0

Если поле со списком является дочерним элементом формы, что препятствует выполнению родительского метода (формы) для рисования? – rrirower

ответ

0

Таким образом, кажется, что нет никакого способа, чтобы передать ключевые события в CFormView. Вместо этого, можно поймать события в PreTranslateMessage (MSG * ГСЖК) и проверить нажатую клавишу, как это:

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); 
} 
Смежные вопросы