Как зарегистрировать пользовательский элемент управления в диалоговом окне ATL/WTL?

Я создал пользовательский элемент управления из ATL::CWindowImpl<CMyCustomControl> и объявил DECLARE_WND_CLASS(_T("CMyCustomControl")).

Я также создал диалоговый ресурс с пользовательским элементом управления с именем класса CMyCustomControl.

Как мне правильно зарегистрировать элемент управления, чтобы я мог отображать его в диалоговом окне?


person user541686    schedule 11.04.2012    source источник
comment
Вы можете найти то, что ищете, в этом вопросе: stackoverflow.com/questions/575532/ Очевидно, это невозможно.   -  person Mark Ransom    schedule 11.04.2012
comment
@MarkRansom: Чоооооо... это действительно предварительная регистрация? Мне действительно все равно, когда он зарегистрирован (ничего стороннего не происходит), я просто хочу, чтобы он отображался... звучит как что-то довольно стандартное для пользовательского элемента управления...   -  person user541686    schedule 11.04.2012
comment
Если вы хотите, чтобы ресурс автоматически создавал элемент управления при создании диалогового окна, то, очевидно, Windows должна заранее знать о классе окна. Однако тактика создания фиктивного элемента управления и создания подклассов в OnInitDialog работает достаточно хорошо.   -  person Mark Ransom    schedule 11.04.2012
comment
@MarkRansom: Хммм, хорошо, спасибо.   -  person user541686    schedule 11.04.2012


Ответы (1)


Есть три типичных способа создания пользовательских элементов управления в WTL.

  1. DECLARE_WND_CLASS/DECLARE_WND_SUPERCLASS + RegisterClassEx API для регистрации класса по имени + ссылка на пользовательский элемент управления в шаблоне диалогового окна для создания экземпляра элемента управления через имя класса
  2. Реализовать класс окна, особенно. наследуя от CWindowImpl, и создавать управление вручную, особенно. с OnCreate/OnInitDialog
  3. Реализовать класс окна, создать экземпляр стандартного элемента управления с помощью шаблона диалога и создать подкласс экземпляра элемента управления, чтобы изменить его поведение (например, статический с гиперссылками, настраиваемый вид списка, элемент управления редактирования с выделением цветом и т. д.)

Со всеми тремя вам нужно сделать больше, чем просто макрос в определении класса. Отличные примеры вы найдете здесь: http://www.viksoe.dk/code/all_wtl.htm в разделе «Управление».

Конечно, четвертый метод реализует элемент управления ActiveX.

person Roman R.    schedule 11.04.2012
comment
Забыл про виксое.дк. +1 -- спасибо за ссылку. - person bvj; 12.08.2016