问题描述
有没有办法将 CHAIN_MSG_MAP_MEMBER
与在其处理函数之一中调用 DefWindowProc
的未初始化窗口类一起使用?
问题是如果成员窗口类没有被创建或子类化,那么它的 DefWindowProc
将不起作用。
但是,如果您仍想尝试将其程序链接为成员怎么办?有解决方法吗?感谢您的帮助。
这是我正在谈论的一个例子。 CChainedMember
对 DefWindowProc()
的调用将是无用的,因为 m_wndChainedMember
本身从未被创建或子类化。它仅用于链接目的。
class CChainedMember : public CWindowImpl<CChainedMember>
{
public:
BEGIN_MSG_MAP(CChainedMember)
MESSAGE_HANDLER(WM_CREATE,OnCreate)
END_MSG_MAP()
LRESULT OnCreate(UINT,WParaM,LParaM,BOOL)
{
ATLTRACE(L"doing something before");
DefWindowProc();
ATLTRACE(L"doing something after");
return 0;
}
}
class CMainWindow : public CWindowImpl<CMainWindow>
{
public:
BEGIN_MSG_MAP(CMainWindow)
CHAIN_MSG_MAP_MEMBER(m_wndChainedMember)
END_MSG_MAP()
CChainedMember m_wndChainedMember;
}
编辑:请无视。我误解了 CHAIN_MSG_MAP_MEMBER
的正确用法。
解决方法
任何未初始化的成员变量都会导致这个问题。您应该构造稍后将在 CMainWindow
构造函数中使用的成员,或者您只需要一个 static
方法。