Карта - сообщение - Большая Энциклопедия Нефти и Газа, статья, страница 1
Чтобы сохранить мир в семье, необходимы терпение, любовь, понимание и по крайней мере два телевизора. ("Правило двух телевизоров") Законы Мерфи (еще...)

Карта - сообщение

Cтраница 1


Карта сообщений представляет собой механизм пересылки сообщений и команд Windows в окна, документы, представления и другие объекты приложения, реализованного на базе MFC. Такие карты преобразуют сообщения Windows, извещения элементов управления, а также команды меню, кнопок панелей инструментов, акселераторов клавиатуры в функции соответствующих классов, которые их обрабатывают. Эта отличительная черта карты сообщений реализована по аналогии с виртуальными функциями C, но имеет дополнительные преимущества, не доступные для них. Каждый класс, который может получить сообщение, должен иметь свою карту сообщений, для того, чтобы иметь возможность соответствующим образом обрабатывать сообщения. При этом следует иметь в виду, что карта сообщений должна определяться вне какой-либо функции или объявления класса. Она также не может размещаться внутри С-блока.  [1]

2 Пример обработки действия пользователя. [2]

Представление проверяет свою карту сообщений и, поскольку не находит там обработчика, направляет команду в ассоциированный с ним документ. Теперь уже документ ищет обработчик в своей карте сообщений, находит его, и начинает обрабатывать команду. Если бы мы не реализовали обработчик в нашем объекте-документе, то команда была бы направлена в шаблон, и в случае неудачи поиск продолжается в объекте класса CMDIFrameWnd, а затем в объекте класса приложения. Для команды, совершающей этот или любой другой маршрут, вызывается метод OnCmdMsg следующего объекта.  [3]

Теперь, ознакомившись с общей структурой карты сообщений и ее компонентами, можно переходить к вопросу о том, в какой последовательности и кем осуществляется поиск обработчика сообщения или команды.  [4]

Между этими двумя вызовами располагаются специальные макросы, называемые компонентами карты сообщений. Вот они то, собственно, и позволяют сопоставить сообщение с конкретным обработчиком.  [5]

6 Пример обработки действия пользователя. [6]

Но и в этом случае каждый оконный класс, образованный непосредственно или косвенно от класса CWnd, имеет собственную карту сообщений, которая устанавливает связи между сообщениями и соответствующими обработчиками. Если соответствующий обработчик не найден в карте сообщений некоторого класса, то он ищется в карте сообщений базового для него класса.  [7]

Если вы хотите обрабатывать уведомляющие сообщения Windows, посылаемые комбинированным списком своему родительскому окну ( обычно это объект класса, производного от С Dialog), то необходимо добавить в карту сообщений этого окна соответствующую функцию-обработчик для этих сообщений.  [8]

9 Пример обработки действия пользователя. [9]

Но и в этом случае каждый оконный класс, образованный непосредственно или косвенно от класса CWnd, имеет собственную карту сообщений, которая устанавливает связи между сообщениями и соответствующими обработчиками. Если соответствующий обработчик не найден в карте сообщений некоторого класса, то он ищется в карте сообщений базового для него класса.  [10]

11 Пример обработки действия пользователя. [11]

Представление проверяет свою карту сообщений и, поскольку не находит там обработчика, направляет команду в ассоциированный с ним документ. Теперь уже документ ищет обработчик в своей карте сообщений, находит его, и начинает обрабатывать команду. Если бы мы не реализовали обработчик в нашем объекте-документе, то команда была бы направлена в шаблон, и в случае неудачи поиск продолжается в объекте класса CMDIFrameWnd, а затем в объекте класса приложения. Для команды, совершающей этот или любой другой маршрут, вызывается метод OnCmdMsg следующего объекта.  [12]

Ассоциативные списки обеспечивают взаимосвязь между ключевым значением и значением элемента данных. На базе ассоциативных списков библиотека классов MFC поддерживает список, называемый картой сообщений, который хранит указатели на функции их обработки.  [13]

14 Пример обработки действия пользователя. [14]

Но и в этом случае каждый оконный класс, образованный непосредственно или косвенно от класса CWnd, имеет собственную карту сообщений, которая устанавливает связи между сообщениями и соответствующими обработчиками. Если соответствующий обработчик не найден в карте сообщений некоторого класса, то он ищется в карте сообщений базового для него класса.  [15]



Страницы:      1    2