netlib.narod.ru< Назад | Оглавление | Далее >

Добавление обработчика событий

Теперь, когда у нас есть работающее приложение, мы можем его модифицировать с помощью мастера ClassWizard. Если приложение уже загружено, выберите пункт ClassWizard из меню View. На рис. 1.8 изображено диалоговое окно мастера ClassWizard.


Рис. 1.8 Диалоговое окно мастера ClassWizard

Рис. 1.8. Диалоговое окно мастера ClassWizard


В диалоговом окне мастера ClassWizard есть пять вкладок. Выберите вкладку Message Map, как показано на рисунке. В диалоговом окне будут показаны установленные обработчики событий для класса, имя которого вы выбираете в поле со списком Class name. Список Object IDs содержит имя класса и список идентификаторов для меню. Вы добавляете обработчик событий, выбрав один из идентификаторов меню или имя класса и указав требуемое сообщение в списке Messages. Новый обработчик сообщений будет создан после щелчка по кнопке Add Function.

Давайте создадим обработчик событий, который будет сообщать о нажатии на клавиши. Это можно сделать установив обработчик для сообщения WM_KEYDOWN. Система Windows посылает сообщение WM_KEYDOWN при нажатии на любую клавишу.

Убедитесь, что в поле со списком Class name выбран класс CSampleView и этот же класс отмечен в списке Object IDs. В списке Message list отметьте строку WM_KEYDOWN (вам понадобится прокрутить список, чтобы найти строку WM_KEYDOWN). После того, как произведете выбор, щелкните по кнопке Add Function. Мастер AppWizard добавит строку WM_KEYDOWN в список Members functions (в нем отображаются существующие в программе обработчики) и добавит новый обработчик событий в текст программы. Теперь щелкните по кнопке Edit code. Мастер ClassWizard откроет окно с текстом программы. Созданный нами новый обработчик показан на рис. 1.9.


Рис. 1.9 Созданный нами обработчик для события WM_KEYDOWN

Рис. 1.9. Созданный нами обработчик события WM_KEYDOWN



ЗАМЕЧАНИЕ


Обратите внимание на код обработчика событий. Обратите внимание на код, который мастер ClassWizard помещает в новый обработчик событий. ClassWizard отмечает наилучшее место для добавления вашего кода, помещая туда комментарий. Иногда ваш код располагается перед вызовом функции базового класса, иногда — после. В некоторых случаях ClassWizard вообще не будет вызывать функции базового класса.


Единственной вещью, которую делает созданный мастером ClassWizard обработчик, является вызов подобной функции базового класса. Мы должны добавить наш код в место, отмеченное ClassWizard с помощью комментариев. Для примера мы будем использовать отладочное макроопределение TRACE, которое будет показывать информацию о поступившем сообщении. Модифицируйте обработчик событий, как показано ниже:

  void CSampleView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  {
    TRACE("WM_KEYDOWN message received ");
    TRACE("keycode=%d  repeat=%d  flags=%d\n", nChar, nRepCnt, nFlags);

    CView::OnKeyDown(nChar, nRepCnt, nFlags);
  }

Теперь скомпилируйте и запустите приложение. После появления окна приложения нажмите какую-нибудь клавишу. В окне Debug программы Developer Studio будет показано сообщение, напечатанное функцией TRACE.


ЗАМЕЧАНИЕ


Этот пример будет работать, только если компилируется в отладочном режиме (Debug mode) и запускается из программы Developer Studio потому что макроопределение TRACE в режиме Release mode не работает.



netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz