发信人: supermario() 
整理人: skyice(1999-11-09 09:20:45), 站内信件
 | 
 
 
消息映射结构只能用于MFC。掌握它和如何在你的代码中应用它是很重要的。
 可能纯C++使用者会对消息映射产生疑问: 为什么Microsoft不用虚拟函数来
 替代消息映射?虚拟函数是MFC中处理消息映射的标准C++方式,所以使用宏
 DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP可能有些怪异。
 MFC使用消息映射来解决虚拟函数的基本问题。参见MFC帮助文件中的CWnd类。
 它包含200多个成员函数,所有的成员函数当不使用消息映射时都是虚拟的。
 现在来看一下所有CWnd类的子类。MFC中大约有近30个类是以CWnd为基类的。
 这包括所有的可见控制如按钮、静态标签和列表。现在想象一下,MFC使用
 虚拟函数,并且你建立一应用程序包含有20个控制。CWnd中的200个虚拟函
 数中的每个都需要自己的虚拟函数表,并且一个控制的每个例程都应有一组
 200个虚拟函数与之关联。则程序可能就有近4,000个虚拟函数表在内存中,
 这对内存有限的机器来说是个大问题。因为其中的大部分是不用的。
 消息映射复制了虚拟函数表的操作,但是它是基于需要的基础之上的。当你
 在消息映射中建立一个入口时,你是在对系统说,“当你看见一个特殊的消
 息时,请调用指定的函数”。只有这些函数实际上被重载到消息映射中,着
 就节省了内存和CPU的负担。当你用DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP
  说明消息映射时,系统会通过你的消息映射选择所有的消息。如果消息映射
 处理了给定的消息,则你的函数会被调用,卸车也就停留在此。但是,如果
 你的消息映射中不包含某个消息的入口,则系统会把该消息发送第二个
 BEGIN_MESSAGE_MAP指定的类。那个类可能会也可能不会处理它,如此重复。
 最后,如果没有消息映射处理一给定的消息,该消息会到由一缺省的处理
 函数来处理。
  -- 点解,点解啊?!!(摧胸顿足状)
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.171.143]
  | 
 
 
 |