问题描述
是否可以创建一个派生自两个或多个 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()
。