Я использую комбинацию ATL и WTL для проекта и вывел свой собственный класс от CWindowImpl
, который выглядит примерно так:Предварительно зарегистрировав класс окна ATL
class CMyControl : public CWindowImpl<CMyControl>
{
public:
DECLARE_WND_CLASS(_T("MyClassName"))
...
BEGIN_MSG_MAP(CMyControl)
...
END_MSG_MAP()
};
Это все хорошо, и если я использую CMyControl::Create
для создания экземпляра элемента управления, то он отлично работает, поскольку под капотом функция CWindowImpl::Create
зарегистрирует класс Win32 (в этом случае называется MyClassName
).
Однако это поведение - класс Win32 регистрируется при создании экземпляра, что вызывает у меня головную боль. Я хочу, чтобы иметь возможность зарегистрировать класс вперед, чтобы я мог использовать имя класса с другой сторонней библиотекой, которая создаст это окно, используя вызов Win32 CreateWindowEx
, но я не могу найти простой способ сделать это. В настоящее время я обходю это, используя static
как имя класса CreateWindowEx
, а затем используйте CMyWindow::SubclassWindow
, чтобы прикрепить к нему свой класс, но это kludge.
Кто-нибудь знает, как зарегистрировать производный класс CWindowImpl
, фактически не создав окно, поэтому я могу успешно передать имя класса до CreateWindowEx
? Я бы подумал, что есть стандартный способ сделать это с окнами ATL, поскольку я не могу первыми столкнуться с этой проблемой.