Шаг 5: Добавление события

Теперь добавьте ClickIn и ClickOut событие для элемента управления ATL. Вам будет пожар ClickIn событие, если пользователь щелкает внутри полигона и огонь ClickOut Если пользователь щелкнет за пределами.

Когда вы создали полный доступ на шаге 2, вы выбрали box.  проверка Поддержки точки подключения ; Это создал IPolyCtlEvents интерфейса в IDL-файле.  Обратите внимание, что имя интерфейса начинается с символа подчеркивания. Это соглашение указывает, что интерфейс является внутренний интерфейс. Таким образом можно выбрать программы, которые позволяют вам просматривать объекты COM не для отображения в интерфейсе пользователя. Также уведомление в IDL-файле Точки соединения поддержки добавил строку для указания того, что IPolyCtlEvents -это интерфейс источника по умолчанию. Исходный атрибут указывает, что элемент управления является источником уведомлений, поэтому он будет вызывать этот интерфейс в контейнере.

Теперь вы должны добавить методы ClickIn и ClickOut для IPolyCtlEvents интерфейс:

  1. Щелкните правой кнопкой мыши на IPolyCtlEvents в контекстного и выбрав Добавить метод... меню.

  2. Выберите тип возвращаемогоvoid.

  3. Тип ClickIn в поле Имя метода.

  4. Введите [in] long x, [in] long y в поле Параметры.

  5. Нажмите кнопку ОК.

Проверьте в IDL-файл, чтобы увидеть, что код был добавлен как метод IPolyCtlEve&nts dispinterface.nbsp; Затем используйте ту же процедуру для определения ClickOut метод с тем же параметров и типом возвращаемого значения.  IPolyCtlEvents диспетчерский в IDL-файле должен теперь выглядеть:

диспетчерский интерфейс _IPolyCtlEvents
{
   Свойства:
   методы:
   [ID(1) принадлежности к группам, helpstring ("метод ClickIn")] аннулировать ClickIn ([в] Лонг x, [в] длинные y);
   [id(2), helpstring ("метод ClickOut")] аннулировать ClickOut ([в] Лонг x, [в] длинные y);
}

ClickInИ ClickOut методы, использующие x и y координаты выбранной точки в качестве параметров.

Теперь создайте библиотеки типов. Для этого можно либо восстановить ваш проект или щелкните правой кнопкой мыши в IDL-файл в FileView и нажмите кнопку Компилировать Polygon.idl. Это создаст файл Polygon.tlb, который является вашей библиотеки типов.

Далее реализуйте интерфейс точки подключения и интерфейс контейнера точки подключения для элемента управления. (В COM, события реализуются через механизм точек подключения. Чтобы получать события от объекта COM, контейнер устанавливает вспомогательное соединение к точке соединения, которая реализует COM-объект. Так как COM-объект может иметь несколько точек подключения, COM-объект реализует интерфейс контейнера точки подключения. Через этот интерфейс контейнер можно определить, какие точки соединения поддерживаются.) Интерфейс, который реализует точку подключения называется IConnectionPoint и интерфейса, который реализует контейнера точки подключения называется IConnectionPointContainer.

Чтобы реализовать IConnectionPoint, использование контекстного для доступа к мастеру точки подключения. Этот мастер создает интерфейс IConnectionPoint , читая ваши библиотеки типов и реализации функции для каждого события, которое может быть уволен.

Чтобы запустить мастер, выполните следующие действия:

  1. Перейти к контекстного (в меню Вид выберите пункт Рабочая область для просмотра контекстного).

  2. Щелкните правой кнопкой мыши на класс реализации элемента управления, в данном случае CPolyCtl.

  3. В контекстном меню выберите Осуществить подключение точка....

  4. Выберите _PolyEvents из списка интерфейсов , а затем нажмите кнопку OK и прокси-класс для точки подключения будет создаваться, в данном случае, CProxy_IPolyCtlEvents.

Если вы посмотрите на созданный файл PolygonCP.h в FileView, вы видите, он имеет класс с именем CProxy_PolyCtlEvents , производный от IConnectionPointImpl. PolygonCP.h также определяет два метода Fire_ClickIn и Fire_ClickOut , которые принимают два координатных параметра. Это методы, которые вы называете, когда вы хотите огонь события из элемента управления.

Мастер также добавил CProxy_PolyEve&nts и IConnectionPointContainerImpl для элемента управления несколькими наследования list.nbsp; Мастер также подвергаются IConnectionPointContainer для вас путем добавления соответствующих записей на карту COM.

Закончив, реализация кода для поддержки событий. Теперь добавьте код для события в соответствующий момент. Помните, что вы будете стрелять ClickIn или ClickOut событие, когда пользователь нажимает левую кнопку мыши в элементе управления. Чтобы определить, когда пользователь нажимает кнопку, сначала добавьте обработчик для сообщения об WM_LBUTTO&NDOWN . В контекстногощелкните правой кнопкой мыши на CPolyCtl класса и выберите Добавить Windows обработчик сообщений... из контекстного menu.nbsp; Выберите WM_LBUTTONDOWN из списка слева и нажмите на кнопку Добавить обработчик .  Нажмите кнопку ОК.

Затем добавьте новый код для функции OnLButtonDown в PolyCtl.h (удаление любой код, размещенный в мастере) так, что OnLButtonDown теперь выглядит следующим образом:

LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
   HRGN hRgn;
   СЛОВО xPos = LOWORD(lParam);  / / горизонтальное положение курсора
   СЛОВО yPos = HIWORD(lParam);  / / вертикальное положение курсора

CalcPoints(m_rcPos);

/ / Создать регион из нашего списка точек
   hRgn = CreatePolygonRgn (& m_arrPoint [0], m_nSides, завод);

/ / Если нажатая точка находится в нашем полигоне затем огонь ClickIn
   / / события иначе мы огонь ClickOut событие
   Если (PtInRegion (hRgn, xPos, yPos))
      Fire_ClickIn (xPos, yPos);
   остальное
      Fire_ClickOut (xPos, yPos);

/ / Удаление региона, который мы создали
   DeleteObject(hRgn);
   Возвращает 0;
}

Так как вы уже рассчитана точки многоугольника в OnDraw функции, использовать их в OnLButtonDown для создания области. Затем используйте функцию PtInRegion API для определения выбранной точки внутри полигона или нет.

uMsgПредставляет собой Идентификатор обработки сообщений Windows. Это позволяет вам иметь одну функцию, которая обрабатывает целый ряд сообщений. wParamИ lParam являются стандартные значения для обработки сообщения. Параметр bHandled позволяет указать ли функция обработки сообщения или нет. По умолчанию, значение имеет значение TRUE для указания, что функция сообщение, но можно установить ЛОЖНЫХ. Это приведет к ATL продолжать искать другой функции обработчика сообщений на который отправляется сообщение.

Теперь попробуйте ваших мероприятий. Построение элемента управления и запустите Тестовый контейнер элемента управления ActiveX . Это время, просмотрите журнал событий wi&ndow.nbsp; Для маршрутизации событий в окне вывода, выберите запись из меню Параметры и выберите журнал в окне вывода. Теперь вставьте элемент управления и попробуйте нажать в окне. Обратите внимание, что ClickIn срабатывает при щелчке мышью в пределах закрашенный полигон и ClickOut срабатывает при щелчке вне.

Затем добавьте на страницу свойств.

Вернуться к шагу 4 |nbsp; К шагу 6

Index