Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Visual C++. ActiveX. Уроки по программированию с сайта http://alexeev.nm.ru

Рассылка №18

Visual C++. ActiveX. Урок 14. Вкладки для стандартных свойств
Visual C++. ActiveX. Урок 15. Еще раз о свойствах окружения
Visual C++. ActiveX. Урок 16. Что такое IDL?

Visual C++. ActiveX. Урок 14. Вкладки для стандартных свойств

В уроке 11 мы с вами посмотрели, как можно добавлять пользовательские свойства для элемента ActiveX в окно со вкладками. В этом же уроке мы посмотрим, как можно создавать вкладки для стандартных свойств - для шрифта, цвета и выбора картинки.

Для добавления вкладки для стандартного свойства проделайте следующие действия:

Найдите в файле реализации класса CFirstXCtrl следующий фрагмент:

BEGIN_PROPPAGEIDS(CFirstAXCtrl, 2)
    PROPPAGEID(CFirstAXPropPage::guid)
END_PROPPAGEIDS(CFirstAXCtrl)

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

BEGIN_PROPPAGEIDS(CFirstAXCtrl, 2)
    PROPPAGEID(CFirstAXPropPage::guid)
    PROPPAGEID(CLSID_CColorPropPage)
END_PROPPAGEIDS(CFirstAXCtrl)

Обратите внимание, что изменений мы внесли два - добавили строчку PROPPAGEID(CLSID_CColorPropPage) и изменили второй параметр у BEGIN_PROPPAGEIDS на 2 (это просто число вкладок в нашем окне свойств).

После компиляции у нашего ActiveX'а в окне вкладок появится в том числе и стандартная вкладка для выбора цвета.

Вставка стандартных вкладок для выбора шрифта и картинки происходит абсолютно аналогично. Для них в качестве параметра у макроса PROPPAGEID(...) надо вставить идентификаторы CLSID_CFontPropPage (для выбора шрифта) и CLSID_CPicturePropPage (для выбора картинки). И не забудьте изменить второй параметр у макроса BEGIN_PROPPAGEIDS! После этого у окна свойств для вашего элемента ActiveX появятся новые вкладки.

Наверх

Visual C++. ActiveX. Урок 15. Еще раз о свойствах окружения

На одном из предыдущих уроков (а именно в уроке 13) мы с вами рассмотрели такое свойство окружения, как цвет фона. В результате наш ActiveX-элемент смог установить для своего фона такой же цвет, как и цвет у формы, на которой он расположен. Существует ряд методов, с помощью которых элемент ActiveX может читать свойства своего контейнера. Вот самые важные из них:

Функция Назначение
OLE_COLOR AmbientBackColor () Возвращает значение для цвета фона контейнера (типа OLE_COLOR). Если у контейнера такого свойства нет, то возвращается системный цвет для фона.
OLE_COLOR AmbientForeColor () Возвращает значение для переднего цвета контейнера (типа OLE_COLOR). Если у контейнера такого свойства нет, то возвращается системное значение.
LPFONTDISP AmbientFont () Возвращается значение шрифта контейнера.
short AmbientTextAlign () Возвращается значение для выравнивания контейнера (1 - левое выравнивание, 2 - по центру, 3 - правое, 0 - числа выравниваются по правому краю, текст - по левому).
BOOL AmbientUserMode () Возврашается 0, если контейнер с ActiveX находится на этапе разработки, и ненулевое значение, когда контейнер находится на этапе выполнения.

Все эти методы берутся из родительского класса для класса нашего ActiveX'а - а именно из класса COleControl.

Наверх

Visual C++. ActiveX. Урок 16. Что такое IDL?

Если совсем кратко, то IDL (Interface Definition Language) - это специальный язык для определения интерфейсов. Одно из его применений - это создание ActiveX на Visual C++. Интерфейсы на вкладке ClassView обозначаются специальным значком ("Леденец на палочке").

Интерфейс представляет из себя только определения свойств, методов и событий элемента ActiveX. Никакой реализации при этом нет. Зачем же для описания интерфейса использовать специальный язык? Причина очень проста - ActiveX-элементы не зависят от языка. Элемент ActiveX, написанный, скажем, на Visual C++, должна понимать любая программа (написанная и на VB, и на Delphi, и на других языках). Потому в описании интерфейса и используется специальный язык - IDL. Реализация же элемента ActiveX пишется уже на конкретном языке программирования.

В состав нашего проекта для элемента ActiveX входит файл с расширением *.odl (FirstAX.odl). Именно в этом файле и содержится интерфейс для нашего ActiveX'а. Давайте кратко посмотрим на его устройство. В начале мы видим строки

...
[ uuid(21F53F7A-237A-4F12-B0E8-4328F48BA3B5), version(1.0),
  helpfile("FirstAX.hlp"),
  helpstring("FirstAX ActiveX Control module"),
  control ]
library FIRSTAXLib
 ...

Здесь мы видим три имени (они выделены полужирным шрифтом). Первое имя

...
uuid(21F53F7A-237A-4F12-B0E8-4328F48BA3B5),
 ...
это компьютерное имя (у вас эти цифры будет другими). Оно используется для идентификации нашего элемента. именно под этим именем информация о нашем ActiveX-элементе хранится в реестре. Это имя представляет из себя GUID (Globally Unique IDentifier) - уникальное 128-битовое имя. Его уникальность гарантируется статистически. Генерируется это имя некоторым сложным способом - через номер сетевой карты и т. д.

Второе имя

  ...
  helpstring("FirstAX ActiveX Control module")
  ...

- это имя, которое используют различные программы просмотра. Вот как оно будет видно в диалоговом окне Visual Basic'а (для его показа выберите в VB меню Project, затем пункт References).

Третье имя

...
library FIRSTAXLib
 ...

это имя для программы, которая использует ваш элемент ActiveX. Его, например, можно увидеть в VB в ObjectBrowser'е:

Далее в этом файле вы видите идентификаторы интерфейсов. Это строки

...
[ uuid(34453837-5884-4429-BB17-738CFCB11950),
   helpstring("Dispatch interface for FirstAX Control"), hidden ]
 dispinterface _DFirstAX
    ...

и

...
[ uuid(5E57FED5-3BFB-4FE7-9CB5-8AB83D2E4321),
   helpstring("Event interface for FirstAX Control") ]
 dispinterface _DFirstAXEvents
    ...

Внутри же них идут описания свойств, методов и событий. Но это все более подробно мы рассмотрим позже. Пока же нам важно было только получить общее представление об языке IDL.

Наверх

Copyright Алексеев Игорь, 2001

Copyright cайт alexeev.nm.ru, 2001



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное