BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
OnKeyDown(pMsg->wParam,LOWORD(pMsg->lParam),HIWORD(pMsg->lParam));
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
Обработка клавиш в диалоге
Такая проблема: Создаю диалоговое приложение MFC, вставляю ClassWizard-ом обработчики сообщений WM_CHAR или WM_KEYDOWN, но при запуке приложения программа не заходит в них, что бы я не нажимал. В чем может быть причина?
Цитата:
Originally posted by kashman
Такая проблема: Создаю диалоговое приложение MFC, вставляю ClassWizard-ом обработчики сообщений WM_CHAR или WM_KEYDOWN, но при запуке приложения программа не заходит в них, что бы я не нажимал. В чем может быть причина?
Такая проблема: Создаю диалоговое приложение MFC, вставляю ClassWizard-ом обработчики сообщений WM_CHAR или WM_KEYDOWN, но при запуке приложения программа не заходит в них, что бы я не нажимал. В чем может быть причина?
В IsDialogMessage.
Используй PreTranslateMessage
Цитата:
Originally posted by craftyfox
В IsDialogMessage.
Используй PreTranslateMessage
В IsDialogMessage.
Используй PreTranslateMessage
Спасибо, это как раз то, что надо! Но... IsDialogMessage обрабатывает сообщения от клавиатуры также стандартными методами, а моего обработчика WM_KEYDOWN не вызывает :(
Как его вызвать?
Цитата:
Originally posted by craftyfox
http://forum.codenet.ru/showthread.php?s=&threadid=8092&highlight=WMKEYDOWN+%E4%E8%E0%EB%EE%E3
http://forum.codenet.ru/showthread.php?s=&threadid=8092&highlight=WMKEYDOWN+%E4%E8%E0%EB%EE%E3
Да-да... Именно так и сделал:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
// pMsg->hwnd = this->m_hWnd;
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CMyDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
MessageBox("asdf");
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
И все-таки мой обработчик не вызывается! :-?
Цитата:
Originally posted by kashman
Да-да... Именно так и сделал:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
// pMsg->hwnd = this->m_hWnd;
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
И все-таки мой обработчик не вызывается! :-?
Да-да... Именно так и сделал:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {
// pMsg->hwnd = this->m_hWnd;
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
И все-таки мой обработчик не вызывается! :-?
странно... пишут, что работает...
тогда вот так:
Код:
Цитата:
Originally posted by craftyfox
странно... пишут, что работает...
тогда вот так:
странно... пишут, что работает...
тогда вот так:
Код:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
OnKeyDown(pMsg->wParam,LOWORD(pMsg->lParam),HIWORD(pMsg->lParam));
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
{
if (pMsg->message == WM_KEYDOWN)
{
OnKeyDown(pMsg->wParam,LOWORD(pMsg->lParam),HIWORD(pMsg->lParam));
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
Заработало! Спасибо++! :)