发信人: wql.bbs@bbs.swjtu.edu.cn (晖), 信区: cnprogram
标  题: 面向对象化程序设计中的消息驱动机制(三)
发信站: 锦城驿站 (Thu Jun 26 04:18:34 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!swjtunews!swjtubbs
出  处: xnjd21.swjtu.edu.cn

三、消息的采集
    消息由事件引发,包括了来自输入设备、键盘、鼠标、定时器以及对
象等消息源的所有信息。这些信息的产生是随机和无序的。但归根结底,
其形式是以当前程序的进程状态为基础的。既然收集消息的过程是对当前
程序进程状态信息的采集,当我们考虑实现软件功能、优化软件性能时,
如何实时而准确地收集消息,就应当放在相当重要的地位。如果我们在采
集消息方面不能及时得到甚至遗漏一些必要信息,系统就不能处于最隹工
作状态。
    ⑴ 与消息采集有关的数据抽象模型
    消息形式的多样性,取决于消息源的多样性。每个消息源发出的消息
都具有不同的数据抽象模型。正确、详尽的数据抽象,能够尽可能少地避
免遗漏信息。以鼠标、键盘和对象消息为例,可以分别描述为:

  struct MouseMessData             //鼠标事件返回的消息数据
  {                                        
    unsigned char mouse_status; //鼠标消息(移动,左、 右键的按下移动,按                                 
                                //下,松开,单击, 双击等)
    int mouse_x,mouse_y;        //鼠标的当前坐标位置
    int mouse_dx, mouse_dy;     //鼠标的坐标位置的变化量( 相对于上次消息发生时)
  };


struct KeyMessData                //键盘消息数据
{
    unsigned int key_code;        //键盘击键后返回的键码
    char key_func;                //击键时的各功能键状态
};

struct ObjMessData                //对象消息
{
   int mess_id;                   //消息类型编码
   void * object_ptr;             //发出消息的对象指针( 如果所有对象是由同                                  
                                  //父类继承而来,可用父类名取代 void)
};

    三种消息源的消息被收集到消息队列是由三个不同的函数实现的,它
们通过一个插入消息的可重载函数向如下结构元素的消息队列中插入消息:


--
※ 来源:.锦城驿站 bbs.swjtu.edu.cn.[FROM: 202.115.65.102]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.927毫秒