Cтраница 2
Так же, как и для обработчиков команд, для каждого извещения необходимо использовать один, и только один макрос ON CONTROL. Обработчик memberFn вызывается только в том случае, если код извещения от элемента управления wNotify, такой как BN CLICKED, совпадает с кодом извещения, определенным в компоненте карты сообщений, и значение параметра id совпадает с идентификатором элемента управления. [16]
Карта сообщений представляет собой механизм пересылки сообщений и команд Windows в окна, документы, представления и другие объекты приложения, реализованного на базе MFC. Такие карты преобразуют сообщения Windows, извещения элементов управления, а также команды меню, кнопок панелей инструментов, акселераторов клавиатуры в функции соответствующих классов, которые их обрабатывают. Эта отличительная черта карты сообщений реализована по аналогии с виртуальными функциями C, но имеет дополнительные преимущества, не доступные для них. Каждый класс, который может получить сообщение, должен иметь свою карту сообщений, для того, чтобы иметь возможность соответствующим образом обрабатывать сообщения. При этом следует иметь в виду, что карта сообщений должна определяться вне какой-либо функции или объявления класса. Она также не может размещаться внутри С-блока. [17]
Когда пользователь выбирает запись в списке - она выделяется, и окно-список посылает родительскому окну извещение. Вообще, список посылает или, правильнее сказать, может посылать несколько извещений родительскому окну. Для них всех предусмотрены перечисленные ниже специальные макросы, позволяющие добавить в карту сообщений окна функции обработки. Функции, добавленные первыми тремя макросами, будут вызваны только для списков, содержащих текстовые строки и созданных со стилем ( о которых чуть позже) LBS NOTIFY. Большинство уведомлений посылается родительскому окну тогда и только тогда, когда список является текущим элементом управления. [18]
Карта сообщений представляет собой механизм пересылки сообщений и команд Windows в окна, документы, представления и другие объекты приложения, реализованного на базе MFC. Такие карты преобразуют сообщения Windows, извещения элементов управления, а также команды меню, кнопок панелей инструментов, акселераторов клавиатуры в функции соответствующих классов, которые их обрабатывают. Эта отличительная черта карты сообщений реализована по аналогии с виртуальными функциями C, но имеет дополнительные преимущества, не доступные для них. Каждый класс, который может получить сообщение, должен иметь свою карту сообщений, для того, чтобы иметь возможность соответствующим образом обрабатывать сообщения. При этом следует иметь в виду, что карта сообщений должна определяться вне какой-либо функции или объявления класса. Она также не может размещаться внутри С-блока. [19]
Когда Run - функция класса CWinThread - получает сообщение, она направляет его в соответствующее окно-получатель сообщения, где оно будет обрабатываться. Несколько иначе все выглядит для команд. Поскольку они формируются в результате взаимодействия пользователя с приложением, то, обычно, команда начинает свой путь к получателю от главного окна приложения. Напомним, что каждый объект, способный получать сообщения, располагает своей картой сообщений. Что же происходит, когда какой-либо объект получает сообщение. [20]
Карта сообщений представляет собой механизм пересылки сообщений и команд Windows в окна, документы, представления и другие объекты приложения, реализованного на базе MFC. Такие карты преобразуют сообщения Windows, извещения элементов управления, а также команды меню, кнопок панелей инструментов, акселераторов клавиатуры в функции соответствующих классов, которые их обрабатывают. Эта отличительная черта карты сообщений реализована по аналогии с виртуальными функциями C, но имеет дополнительные преимущества, не доступные для них. Каждый класс, который может получить сообщение, должен иметь свою карту сообщений, для того, чтобы иметь возможность соответствующим образом обрабатывать сообщения. При этом следует иметь в виду, что карта сообщений должна определяться вне какой-либо функции или объявления класса. Она также не может размещаться внутри С-блока. [21]
Когда Run - функция класса CWinThread - получает сообщение, она направляет его в соответствующее окно-получатель сообщения, где оно будет обрабатываться. Несколько иначе все выглядит для команд. Поскольку они формируются в результате взаимодействия пользователя с приложением, то, обычно, команда начинает свой путь к получателю от главного окна приложения. Напомним, что каждый объект, способный получать сообщения, располагает своей картой сообщений. Что же происходит, когда какой-либо объект получает сообщение. Имея свою карту сообщений получатель ищет в ней поступившую команду ( или сообщение) и в случае успеха запускает соответствующий обработчик. Сразу же возникает вопрос: а если не найдет. Ну что ж, в этом случае поиск переносится в карту сообщений базовых классов, а если и там нет ассоциированного обработчика, то главное окно передает эту команду следующему кандидату на обработку. [22]
Когда Run - функция класса CWinThread - получает сообщение, она направляет его в соответствующее окно-получатель сообщения, где оно будет обрабатываться. Несколько иначе все выглядит для команд. Поскольку они формируются в результате взаимодействия пользователя с приложением, то, обычно, команда начинает свой путь к получателю от главного окна приложения. Напомним, что каждый объект, способный получать сообщения, располагает своей картой сообщений. Что же происходит, когда какой-либо объект получает сообщение. Имея свою карту сообщений получатель ищет в ней поступившую команду ( или сообщение) и в случае успеха запускает соответствующий обработчик. Сразу же возникает вопрос: а если не найдет. Ну что ж, в этом случае поиск переносится в карту сообщений базовых классов, а если и там нет ассоциированного обработчика, то главное окно передает эту команду следующему кандидату на обработку. [23]