ATL учебник показывает, как создать элемент управления с поддержкой точек подключения, как добавлять события и затем как осуществить подключение poi&nt.nbsp; IConnectionPointImpl обсуждает, как ATL реализует точки подключения.
Реализация точки подключения, у вас есть два варианта:
Реализовать свой собственный исходящий источника событий (точки подключения).
Повторное использование подключения точки интерфейс, определенный в другой библиотеке типов.
В любом случае мастер точка подключения использует библиотеку типов для выполнения своей работы.
Примечание Всякий раз, когда вы добавляете метод к диспетчерский интерфейс, на котором уже реализован точки подключения, необходимо перекомпилировать IDL-файл и затем выполните процедуру для добавления точки подключения для элемента управления или объекта.
Для добавления в элемент управления или объект точки подключения
Определите диспетчерский интерфейс в блоке библиотеки IDL-файла. Если установлен флажок Поддержки точки подключения на вкладке атрибуты мастера объектов ATL диспетчерский уже создается. Если вы не установите флажок Поддержки точки подключения , необходимо вручную добавить диспетчерский интерфейс в IDL-файл. Ниже приведен пример диспетчерский интерфейс. Исходящих интерфейсов не обязаны быть диспетчерские интерфейсы, но многие языки сценариев, такие как VBScript и JavaScript требуют этого, так что в этом примере использует два диспетчерских:
библиотека DProjLib { importlib("stdole32.tlb"); importlib("stdole2.tlb");[uuid(57BC50F0-780B-11d1-8C44-0060083E866C),helpstring ("Бадди события")]диспетчерский интерфейс DBuddyEvents{}Свойства:методы:};
Использовать uuidgen.exe или guidgen.exe утилиты для создания идентификатора GUID.
Добавьте диспетчерский как [по умолчанию, источник] интерфейс coclass для object. Опять же, если вы выбрали Точки соединения поддержки флажок на вкладке атрибуты мастера объектов ATL для данного элемента управления, мастер создаст [по умолчанию, источник] вход. Чтобы вручную добавить эту запись, добавьте строку жирным шрифтом:
Посмотреть в IDL-файл в образец Circ ATL для примера.
Использование контекстного для добавления методов и свойств интерфейса событий.
После полного определения диспетчерский Скомпилируйте файл IDL, щелкнув правой кнопкой мыши в IDL-файл в FileView и выбрав команду компиляции optio&n.nbsp; Это будет производить библиотеки типов.
Щелкните правой кнопкой мыши класс в контекстного и выберите пункт Реализовать точку подключения.... Отобразится диалоговое окно одной или нескольких вкладок библиотеки типов и каждой вкладке будет отображаться интерфейсы для этого типа library. Если вы выберите интерфейс и нажмите кнопку OK, вы будете:
Генерировать заголовочный файл с событий прокси-класс, реализующий код, который будет делать исходящий звонков для события.
Добавить запись в карте точки подключения.
Добавить комментарий и # Error (говорю вам, чтобы заменить параметр NULL с адресом идентификатор dispID) в список параметров IProvideClassInfo2Impl.
Если вы не создали библиотеку типов, вы увидите список всех typelibs на вашем computer. Используйте только один из этих typelibs для определения точки подключения, если требуется реализовать точное же исходящий интерфейс, в другой typelib. Если вы строите typelib не по умолчанию источника в с интерфейсом компонентного класса, отобразится диалоговое окно предупреждающее сообщение отчетности интерфейс не подходит (источник) в библиотеке типов.
Реализация точки подключения из библиотеки типов другого объекта
В контекстного, класс, реализующий макрос BEGIN_COM_MAP правой кнопкой мыши и выберите точку подключения осуществить из контекстного меню.
В диалоговом окне Реализация точки подключения нажмите кнопку Добавить Typelib....
Выберите один из доступных типа libraries. После выбора библиотеки типов, вы увидите список доступных интерфейсов в библиотеке типов.
Выберите одно или несколько из доступных интерфейсов и нажмите кнопку ОК.
Измените в IDL-файл либо:
Скопируйте диспетчерский из idl-файла для объекта, которого источник событий используется.
Используйте инструкцию importlib на этой библиотеки типов.
Вот пример из IDL-файла, который использует точку соединения от Circ элемента управления.
[
UUID(38BBFD91-7575-11D1-8C3C-0060083E866C),
Version(1.0),
helpString ("16190 1.0 библиотеки типов")
]
Библиотека MY16190Lib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
importlib("D:\\ATL25\\samples\\circ\\circ.tlb"); / / **** добавить эту строку [
UUID(38BBFD9E-7575-11D1-8C3C-0060083E866C),
helpString ("Atl16190Ctl класса")
]
Компонентный Atl16190Ctl
{
[по умолчанию] интерфейс IAtl16190Ctl;
[по умолчанию, источник] диспетчерский _CircEvents; / / **** и это одно
};
}