如何从多个 CWindowImpl 派生类继承

问题描述

是否可以创建一个派生自两个或多个 CWindowImpl 派生类的类?也许使用虚拟继承?我试图做这样的事情,以利用 CHAIN_MSG_MAP:

class cclassOne : public virtual CWindowImpl<cclassOne>
{
public:

BEGIN_MSG_MAP(cclassOne)
    // ...
END_MSG_MAP()

}

class cclasstwo : public virtual CWindowImpl<cclasstwo>
{
public:

BEGIN_MSG_MAP(cclasstwo)
    // ...
END_MSG_MAP()

}

class cclassthree : public cclassOne,public cclasstwo
{
public:

BEGIN_MSG_MAP(cclassthree)
    CHAIN_MSG_MAP(cclassOne)
    CHAIN_MSG_MAP(cclasstwo)
END_MSG_MAP()

}

但是当我实例化 cclassthree 并尝试调用 SubclassWindow 时,我收到了一个不明确的访问编译错误。那么有人知道怎么做吗?

解决方法

您不需要从 2+ CWindowImpl 基继承(而且总体上也没有多大意义)。相反,由于您在 Message Map Macros (ATL) 中有更多的消息映射选择,因此您更喜欢使用消息映射通过 CHAIN_MSG_MAP_MEMBER 引用它们的单独类,或者使用链接到多个成员的复合控件,例如(取决于您的窗口之间的关系,无论它们是同级还是父/子窗口)。

,

或者您可以使用 c->CClassOne::Create(); 告诉编译器您要调用哪个 Create()