Visual C++. Создание элемента управления ActiveX - Добавление нового метода

ОГЛАВЛЕНИЕ

 

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

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

Методы автоматизации

Методы автоматизации – это функции-члены класса элемента управления, которые образуют программный интерфейс элемента управления и доступны внешнему миру посредством OLE-автоматизации. Другими словами, они вызываются контроллерами автоматизации и сообщают элементу управления, что он должен сделать.

В общем случае методы автоматизации обладают характерными чертами, такими, как:

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

Методы реализуются в виде обычных методов C++. Ограничением является лишь то, что типы параметров и возвращаемых значений должны поддерживать механизм транспортировки (marshaling). Следует помнить, что смысл автоматизации заключается в том, что она позволяет одной программе управлять работой другой программы. Чтобы обеспечить поддержку автоматизации , следует использовать типы семейства VARIANT (VT_xxx).

Методы автоматизации делятся на две основные категории: базовые и пользовательские. Фирма Microsoft определила и реализовала ряд базовых методов автоматизации. Refresh (заставляет элемент перерисовать себя), DoClick (имитирует щелчок мышью на элементе управления) и AboutBox() (отображает на экране модальное диалоговое окно “About” элемента управления). Все эти методы имеют отрицательные DISPID.

Все остальные методы элемента управления определяет разработчик. Такие методы называются пользовательскими. Пользовательские методы, наряду с базовыми, составляют интерфейс автоматизации элемента управления. Эти методы позволяют программам-клиентам управлять внешним видом и поведением элемента управления.

Добавление различных методов

Чтобы добавить в класс элемента управления метод автоматизации – метод, который может быть вызван в контейнере, – следует вызвать ClassWizard и выбрать вкладку “OLE Automation”. В появившемся окне следует выбрать кнопку “Add Method”. Затем в диалоговом окне в полях “External name” и “Internal name” ввести имя нового метода (внешнее и внутренне имена могут отличаться, внутреннее имя метода используется в классе элемента, при помощи внешнего имени контейнер может вызывать метод). Возвращаемое методом значение типа выбирается в списке “Return type”. После того, как ClassWizard создаст остов метода, программист может добавить в него код.

ClassWizard наряду с созданием остова метода добавляет в объявление класса описание созданного метода, а в схему диспетчеризации класса (в файле реализации класса) добавляет соответствующий макрос. В раздел интерфейса диспетчеризации odl-файла в его подраздел methods ClassWizard добавит строку, связывающую с методом идентификатор диспетчеризации.

Для определения реакции элемента управления на действия пользователя следует добавить в класс обработчик сообщения. Для построения остовов обработчиков сообщений следует вызвать ClassWizard и выбрать вкладку “Message Map”. Выбрав в поле “Class name” класс, а в поле “Message” необходимое сообщение, следует нажать кнопку “Add Function”. ClassWizard не только добавит в класс объявление созданных методов и их остовы, но и в таблицу обрабатываемых сообщений вставит соответствующие строки.

Добавление методов, решающих частные задачи, производится вручную, без использования каких-либо средств автоматизированного проектирования.