我使用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
將我的類附加到它,但這是一個混亂。
有沒有人知道如何註冊CWindowImpl
派生類,而實際上沒有創建窗口,所以我可以成功傳遞類名爲CreateWindowEx
?我認爲有一個標準的方法來做到這一點與ATL窗口,因爲我不能成爲第一個遇到這個問題。