Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка клавиш в диалоге

2.2K
29 октября 2004 года
kashman
21 / / 22.07.2003
Такая проблема: Создаю диалоговое приложение MFC, вставляю ClassWizard-ом обработчики сообщений WM_CHAR или WM_KEYDOWN, но при запуке приложения программа не заходит в них, что бы я не нажимал. В чем может быть причина?
430
29 октября 2004 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by kashman
Такая проблема: Создаю диалоговое приложение MFC, вставляю ClassWizard-ом обработчики сообщений WM_CHAR или WM_KEYDOWN, но при запуке приложения программа не заходит в них, что бы я не нажимал. В чем может быть причина?


В IsDialogMessage.
Используй PreTranslateMessage

2.2K
30 октября 2004 года
kashman
21 / / 22.07.2003
Цитата:
Originally posted by craftyfox

В IsDialogMessage.
Используй PreTranslateMessage



Спасибо, это как раз то, что надо! Но... IsDialogMessage обрабатывает сообщения от клавиатуры также стандартными методами, а моего обработчика WM_KEYDOWN не вызывает :(
Как его вызвать?

2.2K
30 октября 2004 года
kashman
21 / / 22.07.2003



Да-да... Именно так и сделал:

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

И все-таки мой обработчик не вызывается! :-?

430
30 октября 2004 года
craftyfox
157 / / 20.02.2000
Цитата:
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)
   {
     OnKeyDown(pMsg->wParam,LOWORD(pMsg->lParam),HIWORD(pMsg->lParam));
     return TRUE;
   }
   return CDialog::PreTranslateMessage(pMsg);
}
2.2K
30 октября 2004 года
kashman
21 / / 22.07.2003
Цитата:
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);
}



Заработало! Спасибо++! :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог