Программирование графики с использованием Direct3D

       

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


Теперь, когда у нас есть работающее приложение, мы можем его модифицировать с помощью мастера ClassWizard. Если приложение уже загружено, выберите пункт ClassWizard из меню View. На рис. 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

ЗАМЕЧАНИЕ Обратите внимание на код обработчика событий. Обратите внимание на код, который мастер ClassWizard помещает в новый обработчик событий. ClassWizard отмечает наилучшее место для добавления вашего кода, помещая туда комментарий. Иногда ваш код располагается перед вызовом функции базового класса, иногда — после. В некоторых случаях ClassWizard вообще не будет вызывать функции базового класса.
<
/p> Единственной вещью, которую делает созданный мастером 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 не работает.

Содержание раздела