Допустим, у вас есть класс диалога ATL, производный от CDialogImpl
, который включает ресурс диалога. Затем предположим, что у вас есть второй класс, производный от CWindowImpl
, который вы хотите использовать в качестве настраиваемого элемента управления в диалоговом окне. Возможно ли это?
Насколько я понимаю, классу настраиваемого элемента управления требуется идентифицируемое имя класса для добавления к настраиваемому элементу управления в редакторе ресурсов диалогового окна. Поэтому я добавил DECLARE_WND_CLASS
в класс управления, чтобы я мог идентифицировать его по имени. Затем я добавил это имя класса к настраиваемому элементу управления.
По-видимому, сложная часть состоит в том, чтобы получить ATL для регистрации класса настраиваемого элемента управления до того, как будет использоваться ресурс диалогового окна. Я пробовал сделать что-то вроде этого в конструкторе диалога:
WNDPROC wp = { 0 };
CMyCustomControl::GetWndClassInfo().Register(&wp);
Но это не сработало. ATL выдает ошибку утверждения при загрузке диалогового окна. триггерная регистрация. А затем я подключился к реальному экземпляру, когда диалог был загружен, во время OnInitDialog
. Это действительно работает при первом создании диалога. Но если диалог закрывается и открывается снова, я попадаю в город ошибки утверждения ATL. Я не уверен, есть ли способ исправить это.
Большое спасибо за любой вклад. Вот некоторые дополнительные ресурсы, которые я нашел до сих пор, которые не выглядят многообещающими:
https://wtl.yahoogroups.narkive.com/FkqcAFcN/cwindowimpl-derived-control-and-win32-createwindow
Предварительная регистрация класса окна ATL