在上节课中,我们介绍了Haiku的脚本API,例如如何通过hey终端命令进行操作。那么这节课我们将继续深入,了解使用C++构建脚本的机制。
详解 Haiku 消息
首先,通过脚本API使用C++来操作其他程序的想法乍看之下,毫无头绪,但是我们有理由这么做。其中之一就是它所带来的巨大便利。hey具有自身的限制,其中最重要的原因是它不具有执行命令的能力,并且需要摒弃一些数据以迎合bash命令解析。使用C++来构建脚本需要对Haiku API 的消息类的了解更为深入,而非流于表面,但是它也通过脚本接口带来了强大的功能。
多数 GUI 开发并不会过多的涉及到消息处理类,因为 API 都已经非常完备。多数情况下,我们对应于消息,仅仅明确的发送一次。那么让我们快速的浏览一下那些用于脚本的消息处理类。
BHandler 和 BLooper 完成了消息处理的大部分工作。BHandler 对消息作出响应。BLooper接收消息,并将其传递给附属的BHandler列表,直到它们其中之一对消息作出某些动作,因为BLooper是BHandler的子类,BLooper也可以对消息作出响应。多数情况下,当发送消息到BWindow及其基于BView的控件时,才会发生,BWindow是BLooper的子类,而BView是BHandler的直接子类。
BMessenger 是用以传递这些四处发送的脚本消息的方法。它的对象可能是BLooper或者BHandler,并且提供了一种发送消息到这些对象的方式,而不管对象时在您的程序或者是系统中的其他地方。
C++脚本
使用C++来构建脚本与使用hey并无很大区别。虽然需要很多的输入,但其内容基本完全一样:每个hey命令都是一个单独的消息,而命令仅仅是BMessage的what属性,而其他的则是供BMessage对应方法所处理的说明符。