Я использую комбинацию 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, поскольку я не могу быть первым, кто столкнулся с этой проблемой.