Схемы событий
Когда элемент управления хочет уведомить контейнер о том, что произошло некоторое действие (определенное разработчиком элемента управления) (например, нажатие клавиши, щелчк мыши или изменение состояния элемента управления) вызывает функцию запуска событий. Эта функция уведомляет контейнер управления о том, что некоторые важные действия произошли путем запуска связанного события.
Библиотека классов Microsoft Foundation предлагает модель программирования, оптимизированную для выполнения событий. В этой модели "карты событий" используются для обозначения функций, которые выполняют события для определенного элемента управления. Карты событий содержат один макрос для каждого события. Например, карта событий, которая запускает событие click, может выглядеть следующим образом:
BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
Макрос EVENT_STOCK_CLICK
указывает, что элемент управления будет запускать событие click акций каждый раз при обнаружении щелчка мыши. Более подробное описание других событий акций см. в статье ActiveX Controls: Events. Макросы также доступны для указания пользовательских событий.
Хотя макросы карты событий важны, обычно они не вставляются напрямую. Это связано с тем, что окно свойств (в представлении классов) автоматически создает записи карты событий в исходных файлах при его использовании для связывания функций запуска событий с событиями. В любое время, когда вы хотите изменить или добавить запись карты событий, можно использовать окно "Свойства ".
Для поддержки карт событий MFC предоставляет следующие макросы:
Макросы карты событий
Объявление карты событий и демаркация
Имя | Описание |
---|---|
DECLARE_EVENT_MAP | Объявляет, что карта событий будет использоваться в классе для сопоставления событий с функциями выполнения событий (необходимо использовать в объявлении класса). |
BEGIN_EVENT_MAP | Начинает определение карты событий (необходимо использовать в реализации класса). |
END_EVENT_MAP | Заканчивает определение карты событий (необходимо использовать в реализации класса). |
Макросы сопоставления событий
Имя | Описание |
---|---|
EVENT_CUSTOM | Указывает, какая функция запуска событий будет запускать указанное событие. |
EVENT_CUSTOM_ID | Указывает, какая функция запуска событий будет запускать указанное событие с указанным идентификатором диспетчера. |
Макросы сопоставления сообщений
Имя | Описание |
---|---|
ON_OLEVERB | Указывает настраиваемую команду, обрабатываемую элементом управления OLE. |
ON_STDOLEVERB | Переопределяет стандартное сопоставление глаголов элемента управления OLE. |
DECLARE_EVENT_MAP
Каждый COleControl
производный класс в программе может предоставить карту событий, чтобы указать события, которые будут запускаться элементом управления.
DECLARE_EVENT_MAP()
Замечания
Используйте макрос DECLARE_EVENT_MAP в конце объявления класса. Затем в файле .cpp, который определяет функции-члены класса, используйте макрос BEGIN_EVENT_MAP, записи макросов для каждого события элемента управления и макрос END_EVENT_MAP, чтобы объявить конец списка событий.
Дополнительные сведения о картах событий см. в статье ActiveX Controls: Events.
Требования
Заголовок afxctl.h
BEGIN_EVENT_MAP
Начинает определение карты событий.
BEGIN_EVENT_MAP(theClass, baseClass)
Параметры
TheClass
Указывает имя класса элемента управления, карта событий которого это.
baseClass
Указывает имя базового класса класса Класса.
Замечания
В файле реализации (.cpp), который определяет функции-члены для класса, запустите карту событий с помощью макроса BEGIN_EVENT_MAP, а затем добавьте записи макросов для каждого события и завершите карту событий с помощью макроса END_EVENT_MAP.
Дополнительные сведения о картах событий и макросе BEGIN_EVENT_MAP см. в статье ActiveX Controls: Events.
Требования
Заголовок afxctl.h
END_EVENT_MAP
Используйте макрос END_EVENT_MAP, чтобы завершить определение карты событий.
END_EVENT_MAP()
Требования
Заголовок afxctl.h
EVENT_CUSTOM
Определяет запись карты событий для настраиваемого события.
EVENT_CUSTOM(pszName, pfnFire, vtsParams)
Параметры
pszName
Имя события.
pfnFire
Имя функции запуска события.
vtsParams
Разделенный пробелом список одной или нескольких констант, указывающий список параметров функции.
Замечания
Параметр vtsParams — это разделенный пробелом список значений из VTS_
констант. Одно или несколько этих значений, разделенных пробелами (а не запятыми), указывает список параметров функции. Например:
VTS_COLOR VTS_FONT
указывает список, содержащий 32-разрядное целое число, представляющее значение цвета RGB, за которым следует указатель на IFontDisp
интерфейс объекта шрифта OLE.
Константы VTS_
и их значения приведены следующим образом:
Символ | Тип параметра |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_COLOR | OLE_COLOR |
VTS_CY | ВАЛЮТА |
VTS_DATE | DATE |
VTS_BSTR | const обугливать* |
VTS_DISPATCH | LPDISPATCH |
VTS_FONT | IFontDispatch* |
VTS_HANDLE | HANDLE |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* |
VTS_PVARIANT | VARIANT* |
VTS_UNKNOWN | LPUNKNOWN |
VTS_OPTEXCLUSIVE | OLE_OPTEXCLUSIVE |
VTS_PICTURE | IPictureDisp* |
VTS_TRISTATE | OLE_TRISTATE |
VTS_XPOS_PIXELS | OLE_XPOS_PIXELS |
VTS_YPOS_PIXELS | OLE_YPOS_PIXELS |
VTS_XSIZE_PIXELS | OLE_XSIZE_PIXELS |
VTS_YSIZE_PIXELS | OLE_YSIZE_PIXELS |
TS_XPOS_HIMETRIC | OLE_XPOS_HIMETRIC |
VTS_YPOS_HIMETRIC | OLE_YPOS_HIMETRIC |
VTS_XSIZE_HIMETRIC | OLE_XSIZE_HIMETRIC |
VTS_YSIZE_HIMETRIC | OLE_YSIZE_HIMETRIC |
Примечание.
Для всех типов вариантов определены дополнительные константы вариантов, за исключением VTS_FONT и VTS_PICTURE, которые предоставляют указатель на константу данных вариантов. Эти константы называются с помощью VTS_Pconstantname
соглашения. Например, VTS_PCOLOR — это указатель на константу VTS_COLOR.
Требования
Заголовок afxctl.h
EVENT_CUSTOM_ID
Определяет функцию запуска событий для настраиваемого события, относящегося к идентификатору диспетчера, указанному диспидом.
EVENT_CUSTOM_ID(
pszName,
dispid,
pfnFire,
vtsParams)
Параметры
pszName
Имя события.
dispid
Идентификатор диспетчера, используемый элементом управления при запуске события.
pfnFire
Имя функции запуска события.
vtsParams
Список переменных параметров, передаваемых контейнеру управления при запуске события.
Замечания
Аргумент vtsParams — это разделенный пробелом список значений из VTS_
констант. Одно или несколько этих значений, разделенных пробелами, а не запятыми, задает список параметров функции. Например:
VTS_COLOR VTS_FONT
указывает список, содержащий 32-разрядное целое число, представляющее значение цвета RGB, за которым следует указатель на IFontDisp
интерфейс объекта шрифта OLE.
VTS_
Список констант см. в EVENT_CUSTOM.
Требования
Заголовок afxctl.h
ON_OLEVERB
Этот макрос определяет запись карты сообщений, которая сопоставляет настраиваемую команду с определенной функцией элемента управления.
ON_OLEVERB(idsVerbName, memberFxn)
Параметры
idsVerbName
Строковый идентификатор ресурса имени команды.
memberFxn
Функция, вызываемая платформой при вызове команды.
Замечания
Редактор ресурсов можно использовать для создания пользовательских имен команд, которые добавляются в таблицу строк.
Прототип функции для memberFxn :
BOOL memberFxn(
LPMSG lpMsg,
HWND hWndParent,
LPCRECT lpRect);
Значения lpMsg, hWndParent и lpRect взяты из соответствующих параметров IOleObject::DoVerb
функции-члена.
Требования
Заголовок afxole.h
ON_STDOLEVERB
Используйте этот макрос для переопределения поведения стандартной команды по умолчанию.
ON_STDOLEVERB(iVerb, memberFxn)
Параметры
iVerb
Индекс стандартной команды для переопределенной команды.
memberFxn
Функция, вызываемая платформой при вызове команды.
Замечания
Стандартный индекс команды имеет форму OLEIVERB_
, за которой следует действие. OLEIVERB_SHOW, OLEIVERB_HIDE и OLEIVERB_UIACTIVATE являются примерами стандартных команд.
См . ON_OLEVERB описание прототипа функции, используемого в качестве параметра memberFxn .
Требования
Заголовок afxole.h