Карты сообщений представляют собой мощный инструмент, значительно облегчающий обработку событий, но Visual C++ делает эту задачу еще более легкой, предоставляя для использования мастер создания классов ClassWizard. ClassWizard — это инструмент, входящий в состав Visual C++ Developer Studio, который предоставляет возможность добавлять, удалять и редактировать функции обработки событий. На рис. 1.2 показан внешний вид диалогового окна мастера ClassWizard.
Рис. 1.2. Диалоговое окно мастера ClassWizard
В окне мастера ClassWizard вы выбираете сообщение, обработчик которого вам необходим, и щелкаете по кнопке Add Function. Мастер ClassWizard создает не выполняющий никаких действий обработчик для выбранного сообщения, который в дальнейшем вы можете модифицировать в соответствии с вашими требованиями. ClassWizard делает добавление обработчиков событий настолько простым, насколько это возможно, поскольку создаваемые им обработчики уже готовы для компиляции. Единственный отсутствующий в них компонент — это ваш код.
Код, который ClassWizard добавляет в ваш проект немного отличается от рассмотренного ранее кода для карты сообщений. Например, если вы создадите предыдущий фрагмент программы с помощью ClassWizard, он будет выглядеть следующим образом:
BEGIN_MESSAGE_MAP(OurClass, BaseClass) //{{AFX_MSG_MAP(OurClass) ON_WM_PAINT() ON_WM_SIZE() ON_WM_LBUTTONDOWN() //}}AFX_MSG_MAP END_MESSAGE_MAP()
Отличие заключается в том, что ClassWizard вставляет в текст программы элементы, выполняющие роль закладок. С точки зрения компилятора эти закладки являются обыкновенными комментариями, однако мастеру ClassWizard они показывают местоположение карты сообщений в вашем исходном коде. Вы можете удалить эти закладки, и получившийся код будет правильно компилироваться, но вы больше не сможете редактировать карту сообщений с помощью мастера ClassWizard.
Вы также можете использовать ClassWizard для удаления обработчиков событий. Когда вы удаляете обработчик с помощью ClassWizard, будет удалена ссылка в карте сообщений и соответствующее объявление функций. Вам останется только удалить фактическое тело функции.
Далее в этой главе мы рассмотрим пример использования мастера ClassWizard.