2009-11-03 8 views
2

У меня есть пользовательский контроль MFC, подклассификация CWnd. Помимо предоставления реализаций OnPaint и PreSubclassWindow, он не отменяет функции по умолчанию и не делает ничего странного в построении, кроме регистрации класса окна в конструкторе.Пользовательский контроль MFC предотвращает создание диалогового окна

Элемент управления добавлен в диалог с помощью диалогового редактора для добавления настраиваемого элемента управления.

Диалог работал, когда это был простой модальный диалог, полученный из CDialog, но у нас есть код, который вызывает CWnd :: CreateDlgIndirect в диалоговые окна экземпляра, и это не удается с помощью настраиваемого элемента управления ... но работает, если пользовательский элемент управления удален из шаблон ресурса.

ответ

1

Нашли это! У меня был пользовательский контроль, регистрирующий его класс окна в собственном конструкторе. У меня был член в диалоге этого настраиваемого типа управления, поэтому ctor вызывался, когда диалог был создан, как и предполагалось. Но, оказывается, базовый класс, с которым я изменил диалог, из которого вышло, вместо CDialog, вызывал CreateDlgIndirect в своем собственном ctor, прежде чем моя собственная инициализация нового класса была достигнута, поэтому он пытался создать пользовательский элемент управления перед окном класс был зарегистрирован.

Мое (слегка грязное решение) заключается в том, чтобы регистрация классов окон происходила при запуске приложения в методе InitInstance, прежде чем произойдет какое-либо диалоговое описание.

Смежные вопросы