На этом шаге мы рассмотрим алгоритм создания элемента управления средствами 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 Кб).
На следующем шаге мы рассмотрим добавление свойства.