MFC 消息映射实现原理

DECLARE_MESSAGE_MAP
BEGIN_MESSAGE_MAP
END_MESSAGE_MAP
这三个宏,实际就是定义并实现了两个函数(一个静态函数GetThisMessageMap,一个虚函数GetMessageMap),
静态函数时属于类的全局函数
-------------------------------
关于GetThisMessageMap函数:
改静态函数内部创建了两个静态成员,第一个静态成员是一个AFX_MSGMAP_ENTRY数组, 里面每个元素记录了{消息号、消息代码、控件ID、需要响应的函数的指针……}, 另一个静态成员是一个AFX_MSGMAP结构类型变量, 该变量记录了一个静态函数地址 (通过这个静态函数就是父类的同名函数,从而可以得到父类的AFX_MSGMAP结构类型变量的地址) 和前面这个静态数组的地址,函数的最后把AFX_MSGMAP结构类型变量的地址返回。
关于GetMessageMap函数:
它是一个虚函数,内部就是调用了静态函数GetThisMessageMap,这样一来,就建立了一个虚表,该虚表中记录了所有父类及自身类中的那个静态函数GetThisMessageMap的地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值