我来自C#背景,正在调试一些遗留的C++代码。我的谷歌技能让我失望了,或者我对结果的理解不足,但是谁能简单解释一下信息地图是用来做什么的呢?非常感谢
发布于 2018-03-20 12:07:40
本机Win32 API通过消息传递工作。特别是,应用程序有一个或偶尔多个消息队列。它使用GetMessage()检索消息。每条消息都有一个类型。
在旧代码中,消息处理代码以switch(msg.message)开始。这个开关语句并不能很好地满足MFC预期的灵活性,它用消息映射代替了switch语句,但两者的基本目的是相同的:将每种消息类型分配给适当的处理程序。
发布于 2018-03-20 12:10:21
主要原因是虚拟函数无法轻松地将消息id映射到您编写的函数中,可能是与控件id相结合,也可能是与特定命令id相结合。
经典的Win32代码向我们展示了一个具有大开关大小写块的窗口过程(WinProc)。它们再次分离为用于WM_COMMAND消息的交换用例块。
有了消息映射,就不会出现用于虚拟函数的大型映射的代码膨胀。此外,消息映射允许MFC代码查看是否可以处理消息。
此外,当新消息应该包含到消息传递系统中时,它们允许轻松扩展。
MFC的文档有一个简略解释。
在Windows的传统程序中,Windows消息在窗口过程中以大开关语句进行处理。MFC使用消息映射将直接消息映射到不同的类成员函数。为此目的,消息映射比虚拟函数更有效,它们允许由最合适的C++对象处理消息--应用程序、文档、视图等等。您可以映射单个消息或一系列消息、命令ID或控制ID。
https://stackoverflow.com/questions/49383622
复制相似问题