logo
Конспект по ООПиП ч

Вкладки диалогового окна ClassWizard.

Для того чтобы вывести на экран диалоговое окно мастера ClassWizard, нужно выбрать из меню View--ClassWizard или нажать <Ctrl+W>. ClassWizard имеет диалоговое окно с несколькими вкладками (в т.ч. Message Maps (Карты сообщений)).

В верхней ее части имеется два раскрывающихся списка. В одном Project— представлен проект, над которым вы в настоящее время работаете, в другом—Class name— класс, карта сообщений которого редактируется. Информация о карте сообщений этого класса выведена в других полях вкладки. Ниже этих однострочных полей расположена пара многострочных окон. В том, что слева, перечислены сам класс и все команды, которые может сформировать пользовательский интерфейс. Когда в левом окне выделено имя класса, в правом перечислены все сообщения Windows, которые этот класс мог бы перехватывать. Кроме того, там же перечислены виртуальные функции, которые отвечают за обработку стандартных (наиболее распространенных) сообщений.

В правой верхней части окна находятся четыре кнопки, пользуясь которыми, можно включить новый класс в проект, новую функцию в существующий класс, для того чтобы перехватывать выделенное в левом окне сообщение, удалить функцию, которая ответственна за обработку выделенного сообщения, или вывести на экран текст этой функции. Типовая методика следующая — нужно выбрать класс, сообщение и щелкнуть на кнопке Add Function с тем, чтобы добавить функцию, которая будет ответственна за обработку заданного сообщения. Ниже перечислены операции, которые будут выполнены после щелчка на Add Function.

• В конец файла текста программы включается заготовка ("скелет" skeleton) функции.

• В файл текста программы, в ту его часть, где размещена карта сообщений, включается новый компонент карты.

• В файл заголовка также вкл-ся новый комп-т карты сообщений.

• Обновл-ся списки сообщений и функций-членов в окнах вкладки.

После включения новой функции щелчок на Edit Code позволит наполнить созданную ClassWizard заготовку функции содержанием соответственно тому, как планируется обрабатывать данное Сообщение. Того же результата можно достичь, сделав двойной щелчок на имени функции в списке Member Functions. Этот список находится ниже окон списков Object IDs и Messages. В нем перечислены функции-члены текущего класса, которые связаны с определенными сообщениями. В данном случае имеются две такие функции.

InitInstance(). Перегружает виртуальную функцию класса CWinApp — базового класса для C<Имя>App. Эта функция помечена символом V в списке, что означает— виртуальная функция (Virtual function).

OnAppAbout(). Перехватывает команду ID_APP_ABOUT; помечена символом W в списке, что означает — сообщение окна (Window message).

Функция InitInstance() вызывается после запуска приложения. Вам нет необходимости углубляться в подробности ее работы— ClassWizard просто напоминает, что эта функция уже перегружена для данного приложения.

И, наконец, ниже окна списка Member Functions выведено сообщение, напоминающее о назначении выделенного сообщения. В Visual C++ начиная с версии 5.0 предлагается новый дополнительный способ перехвата сообщений. Вместо того чтобы вызвать ClassWizard и затем не забыть найти правильное имя класса в раскрывающемся списке, нужно просто щелкнуть правой кнопкой мыши на имени класса в окне ClassView и затем выбрать пункт Add Windows Message Handler (Добавление обработчиков сообщений Windows) контекстного меню. В этом диалоговом окне не показаны виртуальные функции, которые перечислены в главном окне CiassWizard. Глядя на это окно, легко сообразить, что данный класс перехватывает команду ID_APP_ABOUT, но не перехватывает обновление команды (command update). Для того чтобы добавить новую виртуальную функцию, нужно сделать двойной щелчок на имени класса в ClassView и выбрать пункт Add New Virtual Function (Добавление новой виртуальной функции) контекстного меню.