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