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


Добавление события (учебник ATL, часть 5)

На этом шаге добавляется ClickIn и событие ClickOut к вашему элементу управления библиотеки ATL. Вы char событие ClickIn если пользователь щелкает внутри многоугольник и в ClickOut, если пользователь щелкает мышью за пределами. Задачи добавить событие следующим образом:

  • Добавление методов ClickIn и ClickOut

  • Создание библиотеки типов

  • Реализация интерфейсов точки подключения

Добавление методов ClickIn и ClickOut

При создании управление библиотеки ATL на шаге 2 установлен флажок Точки подключения. Это необходимо для создания интерфейс _IPolyCtlEvents в файле Polygon.idl. Обратите внимание, что в начале имени интерфейса с символа подчеркивания. Это соглашение для указания того, что интерфейс внутренний интерфейс. Таким образом, программы, позволяющие просматривать COM-объект может выбрать отображение интерфейса пользователя. Также обратите внимание, что при выборе Точки подключения добавить следующую линию в файле Polygon.idl, чтобы указать, что _IPolyCtlEvents по умолчанию интерфейс источника:

[default, source] dispinterface _IPolyCtlEvents;

Исходный атрибут указывает на то, что элемент управления источника уведомлений, чтобы вызывать этот интерфейс в контейнере.

Теперь добавьте ClickIn и методы ClickOut к _IPolyCtlEvents взаимодействие.

Добавление методов ClickIn и ClickOut

  1. В представлении классов разверните многоугольник и PolygonLib для отображения _IPolyCtlEvents.

  2. Щелкните правой кнопкой мыши _IPolyCtlEvents. В контекстном меню выберите команду Добавить, а затем выберите команду Добавить метод.

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

  4. Введите ClickIn в окно Имя метода.

  5. В Атрибуты параметра, выберите окно В.

  6. Выберите Тип параметраLONG.

  7. Введите x как Имя параметра и нажмите кнопку Добавить.

  8. Повторяющиеся секции 5 до 7, это время для Имя параметраY.

  9. Нажмите кнопку Далее.

  10. Введите метод ClickIn как helpstring.

  11. Нажмите кнопку Готово.

  12. Повторяющееся выше шаги для указания метода ClickOut с теми же параметрами x и y, таким же Атрибуты параметраLONG и тем же типом возврата void.

Проверьте файл Polygon.idl, чтобы увидеть, что код был добавлен в диспетчерский интерфейс _IPolyCtlEvents.

Dispinterface _IPolyCtlEvents в файле Polygon.idl теперь должен выглядеть следующим образом:

dispinterface _IPolyCtlEvents
{
   properties:
   methods:
      [id(1), helpstring("method ClickIn")] void ClickIn([in] LONG x, [in] LONG y);
      [id(2), helpstring("method ClickOut")] void ClickOut([in] LONG x, [in] LONG y);
};

Методы ClickIn и ClickOut принимают координаты x и y выбранной точки в качестве параметров.

Создание библиотеки типов

Создайте библиотеку типов на этом этапе, поскольку мастер точки подключения будет его использовать для получения сведений для этого необходимо создать интерфейс точки подключения и интерфейс контейнера точки подключения для элемента управления.

Создать библиотеку типов

  1. Перестройте проект.

    -или-

  2. Щелкните правой кнопкой мыши файл Polygon.idl в обозревателе решений и выберите в контекстном меню Компилировать.

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

Реализация интерфейсов точки подключения

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

Интерфейс, который реализуется точка подключения вызвать IConnectionPoint и интерфейсом, который реализует контейнер точки подключения вызвать IConnectionPointContainer.

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

Воспользоваться мастером реализация точки подключения

  1. В представлении классов щелкните правой кнопкой мыши класс реализации CPolyCtl элемента управления.

  2. В контекстном меню выберите Добавить, а затем нажмите кнопку Добавить точку подключения.

  3. Выберите из списка Исходные интерфейсы_IPolyCtlEvents и дважды щелкните его, чтобы добавить его в столбец Реализовать точки соединения. Нажмите кнопку Готово. Класс-посредник для точки подключения будет создан в этом случае CProxy_IPolyCtlEvents.

При рассмотрении созданный файл _IPolyCtlEvents_CP.h в обозревателе решений, можно увидеть, что имеется класс с именем CProxy_IPolyCtlEvents, производный от IConnectionPointImpl. _IPolyCtlEvents_CP.h также определяет метод Fire_ClickIn 2 и Fire_ClickOut, который принимает 2 параметров координат. Эти методы вызываются, когда требуется создать событие из элемента управления.

Мастер также CProxy_PolyEvents и добавленное в список IConnectionPointContainerImpl множественного наследования элемента управления. Мастер также предоставлял IConnectionPointContainer, добавив соответствующие записи в сопоставление модели COM.

Закончите реализация кода для поддержки событий. Теперь добавьте некоторый код, чтобы создать события в соответствующий момент. Помните, идите создать событие ClickIn или ClickOut, когда пользователь щелкает нажатие левой кнопки мыши в элементе управления. Чтобы узнать, когда пользователь нажимает кнопку, добавьте обработчик для сообщения WM_LBUTTONDOWN.

Добавление обработчика для сообщения WM_LBUTTONDOWN

  1. В представлении классов щелкните правой кнопкой мыши класс CPolyCtl и нажмите кнопку Свойства в контекстном меню.

  2. В окне Свойства, щелкните значок Сообщения а затем нажмите кнопку WM_LBUTTONDOWN из списка, слева.

  3. Из раскрывающегося списка, который отобразится нажмите кнопку <Добавить> OnLButtonDown. Объявление обработчика OnLButtonDown будет добавлено к PolyCtl.h и реализация обработчика будет добавлена к PolyCtl.cpp.

Далее измените обработчик.

Изменить метод OnLButtonDown

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

    LRESULT CPolyCtl::OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, 
       BOOL& /*bHandled*/)
    {
       HRGN hRgn;
       WORD xPos = LOWORD(lParam);  // horizontal position of cursor
       WORD yPos = HIWORD(lParam);  // vertical position of cursor
    
       CalcPoints(m_rcPos);
    
       // Create a region from our list of points
       hRgn = CreatePolygonRgn(&m_arrPoint[0], m_nSides, WINDING);
    
       // If the clicked point is in our polygon then fire the ClickIn 
       //  event otherwise we fire the ClickOut event 
       if (PtInRegion(hRgn, xPos, yPos))
          Fire_ClickIn(xPos, yPos);
       else
          Fire_ClickOut(xPos, yPos);
    
       // Delete the region that we created
       DeleteObject(hRgn);
       return 0;
    }
    

Этот код использует точки, вычисляемые в функции OnDraw создал область, которая обнаруживает щелчка мыши пользователя с вызовом PtInRegion.

Параметр uMsg идентификатор, обращанным сообщения Windows. Это позволяет иметь одну функцию, обрабатывающую диапазон сообщений. wParam и параметры lParam стандартные значения для обращанными сообщения. BHandled параметр позволяет определить, является ли функция или не обрабатывало сообщение. По умолчанию значение установлено в TRUE для указания того, что функция обрабатывало сообщение, но можно установить ее в FALSE. Это приведет к другой библиотеки ATL продолжить поиск обработчика сообщений функцию, которому отправляется сообщение.

Построение и тестирование элемента управления

Теперь попытка вне свои события. Создайте элемент управления и запустите тестовый контейнер элементов управления ActiveX еще раз. На этот раз обзор окно журнал событий. Для направления события в окно вывода, щелкните Ведение журнала из меню Параметры и выберите Журнал, чтобы вывести окно. Вставьте элемент управления и повторите щелкните в окне. Обратите внимание, что ClickIn инициировано если щелкнуть область заполненный многоугольник, и ClickOut инициировано, если щелкнуть вне его.

Далее добавим страница свойств.

Возвращается к шагу 4 | В шаге 6 на

См. также

Ссылки

Учебник по активной библиотеке шаблонных классов (ATL)