Можно ли использовать класс ATL CWindowImpl в качестве настраиваемого элемента управления в диалоговом ресурсе? - PullRequest
1 голос
/ 07 августа 2020

Допустим, у вас есть класс диалога 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

...