BREW AEE提供了一些用户界面控件:IStatic、IMenuCtl、ITextCtl、ITimeCtl等,所有这些控年都是从IControl接口派生出来的。目前的BREW SDK所提供可用控件不是很多,一些常用的如Checkbox, Radio box, Scroll bar, progress bar等都没有提供,在扩展这些控制,最好也从IControl接口派生出来,以实现统一的控件接口函数。
IControl接口是所有BREW控件类 (IDateCtl 、ImenuCtl、 IStatic 、 ITextCtl 和 ITimeCtl 等) 的抽象基类, 因为这个接口是一个抽象接口,所以不能直接创建该接口的实例。给定一个指向IControl的接口,可以调用IControl接口函数或是派生类接口函数。比如,重画一个菜单,可以调用ICONTROL_Redraw或 IMENUCTL_Redraw中任意一个。使用IControl接口一个好处是可以实现对不同类型的控件调用同一个接口函数。比如,有一个控件数组pControls[numControls]包含了指向不同类型的控件指针,而必需都显示在屏幕上,这时可以通过调用下面的循环来实现:
for (i = 0; i < numControls; i++)
ICONTROL_Redraw(pControls[i])
所有的BREW 控件类都必需实现由IControl接口定义的所有接口函数。然面每个控件类所定义的接口函数特性可以有所不同。
IControl接口定义了如下函数:
下面简要介绍一下BREW提供的控件,并对扩展的控件一并作个介绍。
IDateCtl用于需要用户输入日期时,具有两种类型的日期控件:
IDATECTL_HandleEvent()处理AVK_SELECT, AVK_UP, AVK_DOWN, AVK_LEFT和 AVK_RIGHT按键事件,当它收到AVK_SELECT按键事件时,将向Applet发送EVT_COMMAND表示用户已选择了某个日期。
这个控件可以显示一个可滚动图象。是对IImage接口的一个封装类。
Menu控件允许用户从一个列表中作出选择,方向键用于指明某个选项。当前选中的菜单项是高亮形式表示。用于按下AVK_SELECT将向Applet发送EVT_COMMAND表明用户按下了某个菜单项。
有四种类型的菜单控件:
IStatic显示一个静态文本,和一般Window平台上的Cstatic具有类似的功能。
编辑框控件,可以设置多行或单行,或是显示为密码输入框。
时间选择控件。有三种形式的时间控件。具体参见API。
上面为BREW提供的几种控件。在实际开发中远远不够使用。随本教程附带了几个扩展控件,它们大部分是从IControl派生出并实现了所有的IControl接口函数。
按钮控件,相当于Command Button。它和Soft Key不同是它可以显示在屏幕的任意地方,而不一定显示屏幕的最下方。可以为button控件指定Caption和背景颜色。
Check box 控件。当其处于活动状态时,高亮显示。用户按下AVK_SELECT键时,切换选择和未选择状态。
Radio box控件,为单选钮。可以在一组互拆的选项中选取其一。当其处于活动状态时,高亮显示。当其一个处于被选择状态时,该组其它按钮自动改为未选取状态。
进程条控件。
垂直滚动条,该控件不是从IControl派生出来,一般不单独使用,而是作为其它容器类(IFormWin,IScrollWin和IContainer)的一部分,这些类在其中包括的控件超出范围时,自动显示滚动条。
这两个类都是IWindow的派生类,都是容器类,所谓容器类就是可以管理其它IControl派生类。它们都提供了一个AddControl接口函数。
PUBLIC boolean
ISCROLLWIN_AddControl(IScrollWin *pThis,IControl *pControl,boolean bTabStop=TRUE);
PUBLIC Boolean
IFORMWIN_AddControl(IFormWin *pThis,IControl *pControl,boolean bTabStop=TRUE);
可以将IControl派生类控件添加到这个窗口中。其中bTabStop 为真时,表示添加的控件可以获取焦点,为FALSE是不能获取焦点。
IformWin和IscrollWin都具有管理控件的能力,能过上、下键在不同的控件上切换焦点,以使控件变为活动状态。而且在控件超出范围时自动显示滚动条。
IformWin和IscrollWin不同之处在于对于控件的布局,IformWin允许控件自由放置位置,而IscollWin则是一行一行排列控件,并使控件宽度都窗口等宽。这两个窗口还可在屏幕下方添加一行SoftKey。
IContainer类为一容器控件,在其中可以添加其它IControl控件,但它本身是从IWindow派生出来。可以设置AEE_CP_ROWLAYOUT 、AEE_CP_BAGLAYOUT 分别类同IscrollWin和IformWin布局方法。它也提供了AddControl接口函数用于向其中添加IControl控件。能过上、下键在不同的控件上切换焦点,以使控件变为活动状态。而且在控件超出范围时自动显示滚动条。也可以在其中添加一行SoftKey。