消息映射的解释

时间:2018-03-20 11:58:16

标签: c++ mfc

我来自C#背景,正在调试一些遗留的C ++代码。我的谷歌技能让我失望,或者我对结果的理解可能不足,但是否有人可以简要解释消息地图的用途? 非常感谢

2 个答案:

答案 0 :(得分:2)

本机Win32 API通过消息传递工作。特别是,应用程序有一个或偶尔有更多的消息队列。它使用GetMessage()检索邮件。每条消息都有一个类型。

在旧代码中,消息处理代码以switch(msg.message)开头。这个转换声明并不适合MFC的预期灵活性。它用消息映射替换了switch语句,但它们都有相同的基本用途:将每种消息类型分配给适当的处理程序。

答案 1 :(得分:1)

主要原因是虚函数无法轻松映射消息id,可能与控件id结合,并再次与特定命令id组合,转换为您编写的函数。

Classic Win32代码向我们展示了一个带有大型开关盒块的Window Procedure(WinProc)。并且它们再次分成用于WM_COMMAND消息的交换机案例块。

使用消息映射,没有代码膨胀,其中包含虚拟功能的大型映射。此外,消息映射允许MFC代码查看是否可以处理消息。

当新邮件应包含在邮件系统中时,它们也允许轻松扩展。

MFC的文档有brief explanation

  

在Windows的传统程序中,Windows消息在窗口过程中的大型switch语句中处理。 MFC改为使用消息映射将直接消息映射到不同的类成员函数。为此,消息映射比虚函数更有效,它们允许消息由最合适的C ++对象处理 - 应用程序,文档,视图等。您可以映射单个消息或一系列消息,命令ID或控制ID。