OnKeyDown ?
От: 0000xF  
Дата: 16.07.07 05:20
Оценка:
Привет Всем!

Такая задача — головоломка!?

В класс визарде добавил ивент на мой диалог — WM_KEYDOWN, сгенерировался код:
void CGridPojectDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    // TODO: Add your message handler code here and/or call default

    MessageBox("str");    /*Добавил Я*/ :) 
    
    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}


Ну и что спросите вы, а то что не при каких нажатиях клавиш не появляетса эта мессага!

Уже кровь из ушей пошла ну не как не доганяю в чем дело, помагите а? Буду очень блогадарень.

И еше не отсилать на поиск, не работает, искал в гоогле по моему этого не у кого не было!?

П.С. Клава у меня работает нормално, доказателство этот пост!
Re: OnKeyDown ?
От: Sashaka Россия  
Дата: 16.07.07 05:45
Оценка:
F>Ну и что спросите вы, а то что не при каких нажатиях клавиш не появляетса эта мессага!
F>Уже кровь из ушей пошла ну не как не доганяю в чем дело, помагите а? Буду очень блогадарень.
F>И еше не отсилать на поиск, не работает, искал в гоогле по моему этого не у кого не было!?
F>П.С. Клава у меня работает нормално, доказателство этот пост!

у тебя на диалоге скорее всего есть какие то контролы, например табличка (listctrl) в котором ты и нажимаешь кнопки, а обработчик сообщения у тебя встроен в диалог, который не получает это сообщение когда нажимаешь кнопки в лист контроле а не в диалоге.

попробуй создать свой класс list controla, унаследованный от того что у тебя есть и туда прописать этот обработчик.
Re[2]: OnKeyDown ?
От: AlexLinch Украина  
Дата: 17.07.07 11:32
Оценка:
Исправлено форматирование текста. Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте, Sashaka, Вы писали:

S>попробуй создать свой класс list controla, унаследованный от того что у тебя есть и туда прописать этот обработчик.


Да выше верно сказанно, что у вас наверняка есть какойто елемент управления, которому и приходитя сообщения(так как на контрое установлен фокус ввода). Выходов из это ситуации много:
унаследовать класс(сказанно выше), но что если у вас там два десятка едитов, и фокус то у одного то у другого(е если диалог обширный, и элементы разные)... если же у вас только один елемент управления(к примеру listctr), то чтобы не наследовать новый класс, были придуманы нотифай сообщения, которые уведомляют родителя о событиях происходящих на дочерних елементах управления. Конкретно для листкантрола это:

BEGIN_MESSAGE_MAP(CSomeDlg, CDialog)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnLvnKeydownList1)
END_MESSAGE_MAP()
void CSomeDlg::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
{
  LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
  *pResult = 0;
}

Как универсальный вариант, можно переопределить виртуальную функцию PreTranslateMessage у вашего диалога,она вызывается по родительской цепочьке(клас приложения/главное окно/.../родитель елемента управления/сам елемент управления), и в ней можно перехватить любое сообщение, до того как оно дойдет до адресата(елемента управления на котором установлен фокус)

BOOL CSomeDlg::PreTranslateMessage(MSG* pMsg)
{
  if(pMsg->message==WM_KEYDOWN)
  {
    MessageBox("WM_KEYDOWN");
  }
  return CDialog::PreTranslateMessage(pMsg);
}
Re[3]: OnKeyDown ?
От: AlexLinch Украина  
Дата: 17.07.07 11:36
Оценка:
прошу прощения за очипятки... пора менят клавиатуру...

надеюсь помог...
Удачки.
Re: OnKeyDown ?
От: dcb-BanDos Россия  
Дата: 18.07.07 05:41
Оценка:
Здравствуйте, 0000xF, Вы писали:

F>Привет Всем!




F>Ну и что спросите вы, а то что не при каких нажатиях клавиш не появляетса эта мессага!


в догонку вышесказанным постам:
здесь
Автор(ы): Поль ДиЛашиа (Paul DiLascia)

В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.

здесь
Автор: SchweinDeBurg
Дата: 23.07.05


еще довольно часто помогает Spy++
Ничто не ограничивает полет мысли программиста так, как компилятор.
Re: OnKeyDown ?
От: alex_X  
Дата: 19.07.07 05:41
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте, 0000xF, Вы писали:

F>Ну и что спросите вы, а то что не при каких нажатиях клавиш не появляетса эта мессага!


А в карте сообщений BEGIN_MESSAGE_MAP(CGridPojectDlg, CDialog)
прописан макрос примерно такого вида ON_WM_KEYDOWN()
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.