На этом шаге мы рассмотрим алгоритм создания элемента управления средствами ATL.
Начиная с этого шага мы снова создадим элемент управления OneArmedBandit, но на этот раз с помощью ATL. Это позволит сравнить два инструмента разработки - MFC и ATL - и оценить, какая технология больше подходит в каждом конкретном случае.
Как всегда при работе с ATL, первым делом надо создать ATL-npoект, после чего с помощью ATL Object Wizard мы добавим в него отдельные СОМ-объекты. Ниже мы создадим проект библиотеки DLL, в которой будет находиться элемент управления, а затем вставим туда свой ActiveX-элемент, созданный на основе ATL.
Рис.1. Выбор параметров элемента управления в ATL Object Wizard
Рис.2. Выбор стандартных свойств в ATL Object
В ClassView Вы увидите, что мастер создал интерфейс IATLBandit и класс реализации CATLBandit. CATLBandit является производным от ATL-класса CComControl (впрочем, как и многие другие).
Рис.3. Содержимое ClassView
Откройте файл ATLBandit.h и найдите карту СОМ-объекта: класс CATLBandit поддерживает все интерфейсы, требуемые ActiveX-контейнерам.
Сразу за СОМ-картой находится карта свойств:
BEGIN_PROP_MAP(CATLBandit) PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4) PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4) PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage) PROP_ENTRY("ForeColor", DISPID_FORECOLOR, CLSID_StockColorPage) // Example entries // PROP_ENTRY("Property Description", dispid, clsid) // PROP_PAGE(CLSID_StockColorPage) END_PROP_MAP()
Создавая карту свойств, ATL облегчает реализацию их постоянства. Как видите, в приведенном выше коде строки стандартных свойств (включая размеры элемента управления) уже добавлены в карту свойств. Обратите внимание, что макросы PROP_ENTRY позволяют ассоциировать страницу свойств со свойством и что страница стандартных свойств, цветов ForeColor и BackColor уже определена.
Текст приложения можно взять здесь (20,1 Кб).
На следующем шаге мы рассмотрим добавление свойства.