三九宝宝网宝宝百科宝宝知识

要实现接口的话,必须使用多重继承机制

11月27日 编辑 39baobao.com

[孩子跟人打招呼有多重要]礼拜天带着儿子去小公园玩,刚好遇到了老妈的同事李阿姨,她也带着孙女出来玩,虽然不熟但还是打个招呼就聊上了。聊到一半,李阿姨的孙女跑过来了,小姑娘看到我这个陌生阿姨有点羞怯...+阅读

C++中,如果要实现接口的话,必须使用多重继承机制。MFC中,假如我们有一个类,既需要从MFC窗口类派生,又需要实现我们程序内部的一个接口,例如下面的代码。

class MyBaseClass

{

public:

virtual ~MyBaseClass(){}

}

class MyDialog : public MyBaseClass, public CDialog

{

...

}

如果在这类里添加消息映射函数的话,考试.大提示添加OnLButtonDown消息函数

class MyBaseClass

{

public:

virtual ~MyBaseClass(){}

}

class MyDialog : public MyBaseClass, public CDialog

{

public:

DECLARE_MESSAGE_MAP()

afx_msg void OnLButtonDown(UINT flag, CPoint point);

}

.c文件

BEGIN_MESSAGE_MAP(MyDialog, CDialog)

ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

void MyDialog::OnLButtonDown(UINT flag, CPoint point)

{

}

当点击点击MyDialog激活该消息时会出现异常。

出现这个异常的原因很简单,但是调查过程还是比较难的。很显然这个异常的原因是出现在消息映射部分。

我们看看ON_WM_LBUTTONDOWN()这个宏的定义:

#define ON_WM_LBUTTONDOWN() \

{ WM_LBUTTONDOWN, 0, 0, 0, AfxSig_vwp, \

(AFX_PMSG)(AFX_PMSGW) \

(static_cast< void (AFX_MSG_CALL CWnd::*)(UINT, CPoint) >(

其中mmf.pfn_v_u_p就是MyDialog::OnLButtonDown的地址,而对象的地址(MyDialog对象的地址)被直接当成CWnd的地址了。所以这里要求MFC类必须作为第一个父类。因为当成第二父类的时候,从对象地址到CWnd地址要差一个虚函数表指针的大小,这个虚函数表是第一父类的需函数表(当然,第一父类至少要包含一个virtual函数,不相信这个问题的朋友可以试试在第一父类一个虚函数也不声明,这个时侯就没有这个问题了)。这应该是MFC实现时的疏忽吧,因为可以简单的在DECLARE_MESSAGE_MAP()宏里添加一个虚函数即可:

#define DECLARE_MESSAGE_MAP() \

MFC_DECLARE_MESSAGE_MAP(); \

virtual GetMFCObject(){return (CObject*)this;}

在调用消息映射函数时改为:

(this->GetMFCObject()->*mmf.pfn_v_u_p)(static_cast(wParam), point);

就应该可以了

以下为关联文档:

你的信任,对孩子来说到底有多重前段时间有部非常火的印度电影《摔跤吧!爸爸》。电影讲述的是一位摔跤冠军的父亲,偶然的发现了女儿的天赋和闪光点,在重男轻女的社会里,他顶住一切压力,在所有人都认为不可能的情...

让孩子见世面,到底有多重最近去参加一些活动,很多人问我,你觉得你教育过程中,最想做的一件事是什么?我说,让孩子见世面。可是,我们没有时间,也不那么有钱,眼巴巴地过着日子,朝九晚五,我们到底该怎样让孩子见世...

让专家和数据告诉你:补充维生素A对中国宝宝有多重要!我国儿童维生素A缺乏现状根据近五年的地域性流行病学调查数据显示,我国各地区亚临床和可疑维生素A缺乏率仍居高不下,即使是北京、江苏、重庆等较为发达的地区,都无法避免维生...

教孩子学会承担责任,到底有多重一个有责任心的人,才能算是一个心理健全的人。聪明的父母,都会在教育的过程中将为自己的未来承担责任的意识根植于孩子的心中,去培养孩子具备塑造未来的意识,让孩子用今天的努...

想象力到底对孩子有多重我们常常看到“关注孩子的想象力”这句话,而且现在这句话变得越来越流行时尚。但我也见到很多家长在对培养孩子的想象力方面有一些顾虑,当看到孩子把一副图画自己进行描述形容...

让孩子好看有多重该不该给孩子好好打扮?这大概一直是萦绕在许多父母心中的一个困惑。我们一边赞叹欣赏着各种明星亲子节目或是影视剧中穿着打扮时尚精致的小小人儿,一边又沉溺于“孩子喜欢上...

和孩子好好说话,究竟有多重最近流行谈原生家庭,我们不想活成父母的样子,可终究步了后尘。知道吗?很多孩子正面临着我们当年受到的语言伤害。前几天,我在网络上看到了一段话:18岁,不会说情话,可能错过心爱的...

孩子对于父母的信任有多重孩子对于父母的信任有多重要?父母除了付出爱之外还能给孩子什么?要知道,剥夺孩子对父母的信任,都是这些事!日复一日的平淡,隐藏了我们和孩子的爱高岩,在花样的年纪自杀离世,20年后...

父母的修养对孩子的影响有多重父母的修养对孩子的影响有多重要?要知道父母的爱,才是孩子爱的能力。最近一段时间,“山鸡哥”陈小春带着四岁的儿子上《爸爸去哪儿5》,新晋小暖男Jasper以其超高的情商和理性,将...

推荐阅读
图文推荐