Поделиться через


Схемы событий

Когда элемент управления хочет уведомить контейнер о том, что произошло некоторое действие (определенное разработчиком элемента управления) (например, нажатие клавиши, щелчк мыши или изменение состояния элемента управления) вызывает функцию запуска событий. Эта функция уведомляет контейнер управления о том, что некоторые важные действия произошли путем запуска связанного события.

Библиотека классов 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

См. также

Макросы и глобальные