Я использую комбинацию ATL и WTL для проекта и получил свой собственный класс от CWindowImpl
, который выглядит примерно так:
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
, чтобы присоединить к нему свой класс, но это тупик.
Кто-нибудь знает, как зарегистрировать производный класс CWindowImpl
без фактического создания окна, чтобы я мог успешно передать имя класса CreateWindowEx
? Я бы подумал, что есть стандартный способ сделать это с окнами ATL, поскольку я не могу быть первым, кто столкнулся с этой проблемой.