将 CHAIN_MSG_MAP_MEMBER 与 DefWindowProc 一起使用

问题描述

有没有办法将 CHAIN_MSG_MAP_MEMBER 与在其处理函数之一中调用 DefWindowProc 的未初始化窗口类一起使用?

问题是如果成员窗口类没有被创建或子类化,那么它的 DefWindowProc 将不起作用。

但是,如果您仍想尝试将其程序链接为成员怎么办?有解决方法吗?感谢您的帮助。

这是我正在谈论的一个例子。 CChainedMemberDefWindowProc()调用将是无用的,因为 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 方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...