我在一个项目中使用了 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 类——让我很头疼。我希望能够预先注册类,以便我可以将类名与另一个 3rd 方库一起使用,该库将使用 Win32CreateWindowEx调用创建窗口,但我找不到一个简单的方法来做到这一点。目前我通过使用static作为CreateWindowEx类名来解决这个问题,然后使用CMyWindow::SubclassWindow将我的类附加到它,但这是一个杂项。
有谁知道如何在CWindowImpl不实际创建窗口的情况下注册派生类,以便我可以CreateWindowEx成功传递类名?我认为有一种标准方法可以使用 ATL 窗口来执行此操作,因为我不是第一个遇到此问题的人。