Элементы управления ActiveX в MFC. Добавление пользовательских событий
Пользовательские события отличаются от стандартных событий в том, что они автоматически не инициируемых классом COleControl. Пользовательское событие распознает определенные действия, определенный разработчиком элементов управления, как событие. Записи сопоставления событий для пользовательских событий представлены макросом EVENT_CUSTOM. В следующем разделе реализует пользовательское событие для проекта элемента управления ActiveX, который был создан с помощью мастера элементов управления ActiveX.
Добавление пользовательского события с помощью мастера добавления события
Следующая процедура добавляет пользовательское событие, определенное ClickIn. С помощью этой процедуры можно добавить другие пользовательские события. Замените имя пользовательского события и его параметры имени события и параметров ClickIn.
Добавление пользовательского события ClickIn с помощью мастера добавления события
Загрузите проект элемента управления.
В представлении классов щелкните правой кнопкой мыши класс элемента управления ActiveX, чтобы открыть контекстное меню.
В контекстном меню щелкните Добавить, а затем щелкните Добавить событие.
Это будет открыт мастер добавления события.
В поле Имя события, выделите сначала любых существующих событие, а затем щелкните переключатель Другой включен, тип ClickIn.
В поле Внутреннее имя введите имя функции включения события. В данном примере используйте значение по умолчанию, предоставленное с помощью мастера добавления события (FireClickIn).
Добавьте параметр с именем xCoord (тип OLE_XPOS_PIXELS), с помощью элементов управления Имя параметра и Тип параметра .
Добавьте второй параметр с именем, yCoord (тип OLE_YPOS_PIXELS).
Нажмите кнопку Готово, чтобы создать событие.
Добавьте изменения мастера события для пользовательских событий
При добавлении пользовательского события, мастер добавления события вносит изменения в класс элемента управления. H, .cpp и файлы .IDL. В следующих примерах кода относятся к событию ClickIn.
Следующие линии добавляются к заголовку (. Файл H) класса элемента управления.
void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}
Этот код объявляет, встроенная функция FireClickIn, которая вызывает функцию COleControl::FireEvent с событием и параметрами ClickIn указано с помощью мастера добавления события.
Кроме того, следующая линия добавляется сопоставление событий для элемента управления, расположенному в файле реализации (CPP) класса элемента управления.
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
Этот код сопоставляет событие ClickIn к встроенной функции FireClickIn, передавая параметры, заданные с помощью мастера добавления события.
Наконец, следующая линия добавляется в файл .IDL элемента управления:
[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Эта линия присваивает событию ClickIn определенный идентификатор, используемой события с позиции в списке события мастера добавления события. Список записей в случае позволяет контейнер, чтобы реагировать на события. Например, он может предоставить код обработчика, которая должна выполняться при запуске события.
Вызов FireClickIn
После добавления пользовательского события ClickIn с помощью мастера добавления события необходимо решить, когда это событие, увольнянным. Это выполняется путем вызова FireClickIn при правильное действие происходит. Для данного обсуждения элемент управления использует функцию InCircle внутри обработчика сообщений WM_LBUTTONDOWN порождения события ClickIn, когда пользователь щелкает внутри круговой или эллиптической области. В следующей процедуре добавляется обработчик WM_LBUTTONDOWN.
Добавление обработчика сообщений с помощью мастера добавления события
Загрузите проект элемента управления.
В представлении классов, выделите класс элемента управления ActiveX.
В окне "Свойства" нажмите кнопку Сообщения.
Окно свойств отображается список сообщений, которые могут обрабатываться элемента управления ActiveX. Любое сообщение, отображаемое в шрифтом уже имеет функцию обработчика присвоенную на него.
В окне свойств, выделите сообщение необходимо обработать. Для этого примера выберите WM_LBUTTONDOWN.
В раскрывающемся списке справа, выберите <Add> OnLButtonDown.
Дважды щелкните новую функцию обработчика событий в представлении классов, чтобы поскакать коду обработчика сообщений в файле реализации (CPP) элемента управления ActiveX.
Следующий пример кода вызывает функцию InCircle каждый раз при нажатой указывать в окне элемента управления. Этот пример можно найти в функции обработчика WM_LBUTTONDOWN, OnLButtonDown, краткого в Образец CIRC.
void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (InCircle(point))
FireClickIn(point.x, point.y);
COleControl::OnLButtonDown(nFlags, point);
}
Примечание
Когда мастер добавления события создаются обработчики сообщений для действий кнопку мыши, вызов к одному обработчику сообщений базового класса добавляется автоматически.Не удаляйте этот вызов.Если элемент управления используются любые сообщения мыши хранения, обработчик сообщений в базовом классе необходимо вызвать для обеспечения захват мыши обрабатывается неправильно.
В следующем примере, событие срабатывает, только если нажатие происходит внутри круговой или эллиптической области в элементе управления. Чтобы достичь этого расширения функциональности, можно поместить функция InCircle в файле реализации элемента управления (CPP).
VARIANT_BOOL CMyAxUICtrl::InCircle(CPoint& point)
{
CRect rc;
GetClientRect(rc);
// Determine radii
double a = (rc.right - rc.left) / 2;
double b = (rc.bottom - rc.top) / 2;
// Determine x, y
double x = point.x - (rc.left + rc.right) / 2;
double y = point.y - (rc.top + rc.bottom) / 2;
// Apply ellipse formula
return ((x * x) / (a * a) + (y * y) / (b * b) <= 1);
}
Также потребуется добавить следующее объявление функции InCircle к заголовку элемента управления (. Файл H).
VARIANT_BOOL InCircle(CPoint& point);
Пользовательские события с именами биржевой
Можно создать пользовательские события с таким же именем, как и стандартные события, однако нельзя реализовать находятся в одном элементе управления. Например, может потребоваться создать пользовательское событие вызывается щелчком, не применяется, если щелкнуть стандартного события обычно увольнятьTm. Затем можно включать событие click в любое время, вызвав его возможности включения.
Следующая процедура добавляет пользовательское событие click.
Добавить пользовательское событие, которое использует имя стандартного события
Загрузите проект элемента управления.
В представлении классов щелкните правой кнопкой мыши класс элемента управления ActiveX, чтобы открыть контекстное меню.
В контекстном меню щелкните Добавить, а затем щелкните Добавить событие.
Это будет открыт мастер добавления события.
В раскрывающемся списке Имя события выберите имя стандартного события. Для этого примера выберите Щелчок.
В поле Тип события, выберите Другой.
Нажмите кнопку Готово, чтобы создать событие.
Вызов FireClick в соответствующих местах в коде.