2016-02-12 2 views
0

Я пытался использовать следующий код для прослушивания простых событий клавиатуры в приложении на основе диалога, но при нажатии этих клавиш ничего не происходит. Может ли кто-нибудь сказать мне, что пошло не так?Прослушивание событий клавиатуры в MFC в PreTranslateMessage()

BOOL PreTranslateMessage(MSG *pMsg) 
{ 

CListeningApp* App = (CListeningApp*) AfxGetApp(); 
int x=(int)pMsg->wParam; 

if(pMsg->message==WM_KEYDOWN) 
{ 
    if(x==VK_UP) 
    MessageBox(NULL,L"UP",L"UP", MB_OK); 

    if(x==VK_DOWN) 
    MessageBox(NULL,L"DOWN",L"DOWN", MB_OK); 

    if(x==VK_RIGHT) 
    MessageBox(NULL,L"RIGHT",L"RIGHT", MB_OK); 

    if(x==VK_LEFT) 
    MessageBox(NULL,L"LEFT",L"LEFT", MB_OK); 

    if(x==65) 
     MessageBox(NULL,L"Keyboard Event",L"You Pressed the letter a", MB_OK); 


} 
return TRUE; 

} 
+0

Потому что никто не называет 'PreTranslateMessage'. Ваш 'PreTranslateMessage' является просто автономной функцией. Вы можете переименовать свой 'PreTranslateMessage' в' foobar', результат будет таким же. Прочитайте [this] (https://msdn.microsoft.com/library/kkbhxcs2.aspx). –

+1

Просто предложение: никогда не отлаживайте ничего с помощью 'MessageBox()', особенно не обработчика событий клавиатуры. Используйте ':: OutputDebugString()' и следите за ним в окне вывода отладчика. –

+0

@ VladFeinstein он работает здесь для тестирования, но вы правы 'OutputDebugString' лучше. –

ответ

2

Функция PreTranslateMessage является автономной функцией. Он не будет вызываться автоматически только потому, что его имя PreTranslateMessage.

Эта функция должна быть членом вашего диалогового класса.

BOOL CYourDlg::PreTranslateMessage(MSG* pMsg) 
{ 
... 
} 

CYourDlg быть ваш диалог класса.

И где-то в декларации диалогового класса CYourDlg сайта:

virtual BOOL PreTranslateMessage(MSG* pMsg); 
+0

Правда. Вы просто забыли упомянуть, что в «PreTranslateMessage» мало смысла делать это. Скорее просто переопределите 'OnKeyDown'. –

+1

Также вызывайте базовый класс 'return CDialog :: PreTranslateMessage (pMsg);' –

+0

@MichaelWalz это сработало .. спасибо большое :) –

Смежные вопросы