Программирование под Win32


Программирование для Windows с помощью библиотеки объектов OWL - стр. 40


MyWindow::_____ entries[   ]={

Перечисляемые после этого через запятые условные имена обрабатываемых в приложении сообще­

ний, вроде EV_WM_TIMER или EV_WM_GETMINMAXINFO (которые, в свою очередь, являются мак­

росами), выступают в качестве элементов массива___ entries[]. Для обозначения конца этого массива ис­

пользуется макрос END_RESPONSE_TABLE, который расширяется в описание "пустого" структурного

пакета данных и завершающей фигурной скобки:

{0,   0,    0,   0}}

Описание любого массива должно, разумеется, завершаться знаком точки с запятой, которого, за­метьте, нет в расширении макроса END_RESPONSE_TABLE. Этот знак включаем в программу мы сами, указывая его после вызова этого макроса (см. текст примера 27.1).

В файле eventhan.h описаны четыре макроса вида DEFINE_RESPONSE_TABLEx, различающиеся по­следним символом-цифрой и предназначенные для использования в классах окон с различным числом родительских (базовых) классов, которые, в свою очередь, содержат внутренние таблицы отклика. Наш класс MyWindow является единственным потомком вертикальной (не разветвленной) структуры классов (см. рис. 25.4), поэтому мы использовали вариант макроса DEFINE_RESPONSE_TABLE 1. Если бы класс MyWindow происходил от двух или трех базовых классов, расположенных непосредственно над ним (и содержащих собственные таблицы отклика на те или иные сообщения), то для образования таблицы от­кликов пришлось бы использовать макросы DEFINE_RESPONSE_TABLE2 или DEFINE_RESPONSE_TABLE3. Для классов окон, не имеющих базовых, используется макрос DEFINE_RESPONSE_TABLE. Расширения указанной группы макросов различаются видом функции Find(), осуществляющей поиск в массиве структурных пакетов данных конкретного пакета, соответст­вующего пришедшему сообщению, что дает возможность в дальнейшем вызвать прикладную функцию обработки этого сообщения. Если для поступившего сообщения в нашей таблице отклика не нашлось со­ответствия, функция Find() пытается найти такое соответствие во всех базовых классах, имена которых мы предоставляем функции Find() через параметры использованной в программе разновидности макроса DEFINE_RESPONSE_TABLE. В нашем случае сообщения ищутся, кроме класса MyWindow, еще в базо­вом классе TFrameWindow.




Начало  Назад  Вперед



Книжный магазин