关于易.尘土 界面库,您需要知道的。

文章来源 大地的博客  http://www.extgui.com/post/edust_message_learn.html
1、挂接菜单事件
  挂接命令事件和菜单选择事件 统称为 挂接菜单事件,这类消息都是通过WM_COMMAND发送。如:一个按钮被单击,一个菜单项被单击。
2、挂接事件
  任何窗口消息 都可以通过 挂接事件() 来进行处理。 如 WM_SIZE 尺寸被改变事件,WM_PAINT 重画事件 WM_CLOSE 关闭事件 等。
 
3、挂接组件事件
  一些组件,有自身的扩展事件,比如 选择框的“选择改变”等。在windows 早期,通知事件也是通过 WM_COMMAND 发送的。但后来 WM_COMMAND 已经不能满足需求。因此 也有部分通知事件是通过 WM_NOTIFY 消息发送的。这两类事件 都通过 挂接通知事件来进行处理。
 
4、滚动事件
  就目前,这是滚动条和滑块条特有的事件。您也可以通过 挂接事件() WM_HSCROLL WM_VSCROLL 进行处理。当然 挂接滚动事件或者挂接事件肯定不符合面向对象的设计思想,您也可以继承一个类并覆盖 滚动事件()方法进行处理。
(图一) 滚动事件方法原型
 
5、关于事件的处理顺序。
  一个相同事件,您可以挂接多个处理子程序。调用顺序是 后挂接的先被调用。如果一个事件要被忽略,不被先挂接的处理子程序处理,您可以使用 事件.跳过 () 来进行忽略。事件函数的返回值是逻辑型,返回真 表示这个事件会发给窗口过程处理,返回假 则表示这个消息不需要默认窗口过程处理了。
 
6、关于消息过滤。
    任何一个属于组件自身的消息,组件都有最高的优先级来处理它。 这个处理方法在对象的 消息预处理() 里实现。如果您要自己优先处理属于组件自身的消息,那么最好的办法就是在 消息预处理()里做。 当系统从消息队列中获取一个消息,它首先判断属于哪个组件或者窗口,然后调用 它的 消息预处理() 方法,如果这个方法返回假 则表明这个消息不需要继续分发。如果返回真,它会调用事件组件的父窗口的消息预处理()方法,直到消息被处理。如果您需要过滤队列消息,这里是优先级最高的位置。当然有一些非队列消息在这里是不能进行处理的。 比如 WM_PAINT。windows为了提高窗口绘图效率。对于WM_PAINT等是不会通过消息队列的,而是直接调用窗口过程。您可以继承一个窗口,然后 覆盖 消息过程() 来进行过滤。
 
(图二) 消息预处理方法原型

 

 

(图三) 消息过程方法原型

你可能感兴趣的:(windows,command,扩展)