描述:
CCtrlWnd从CAxWindow继承,又没有改写CAxWindow的Create函数,
这两个CreateHost方法为什么会不同?
class CCtrlWnd: public CWindowImpl<CCtrlWnd, CAxWindow>
{
public:
HWND CreateHost(HWND hWndParent, RECT& rcPos, UINT nID = 0, LPSTR szWindowName = NULL,
LPVOID lpCreateParam = NULL)
{
return CAxWindow::Create(hWndParent, rcPos, szWindowName, m_dwStyle,
m_dwExStyle, nID, lpCreateParam);
}
private:
DWORD m_dwStyle;
DWORD m_dwExStyle;
}
class CCtrlWnd: public CWindowImpl<CCtrlWnd, CAxWindow>
{
public:
HWND CreateHost(HWND hWndParent, RECT& rcPos, UINT nID = 0, LPSTR szWindowName = NULL,
LPVOID lpCreateParam = NULL)
{
return Create(hWndParent, rcPos, szWindowName, m_dwStyle,
m_dwExStyle, nID, lpCreateParam);
}
private:
DWORD m_dwStyle;
DWORD m_dwExStyle;
}
第一个创建的对像只能处理CAxWindow的消息,对于Message map里面的内容都不会理会。我想
可能第一个创建的是CAxWindow对象,第二个创建的才是CCtrlWnd对像吧。
解决方案1:
CCtrlWnd是继承自CWindowImpl,当然优先调用CWindowImpl::Create