现在的位置: 首页 > 综合 > 正文

BREW开发教程(10):用户界面

2013年02月15日 ⁄ 综合 ⁄ 共 3107字 ⁄ 字号 评论关闭

BREW AEE提供了一些用户界面控件:IStatic、IMenuCtl、ITextCtl、ITimeCtl等,所有这些控年都是从IControl接口派生出来的。目前的BREW SDK所提供可用控件不是很多,一些常用的如Checkbox, Radio box, Scroll bar, progress bar等都没有提供,在扩展这些控制,最好也从IControl接口派生出来,以实现统一的控件接口函数。

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接口定义了如下函数:

  • ICONTROL_HandleEvent()将消息传递给控件,BREW控件处理按键事件以允许用户输入文本、时间、日期或是选择某个菜单项。一个控件只有处于活动状态时才能接收按键事件。不同类型的控件对按键事件有不同的处理,除非控件是某个对话框的一部分,Applet必需在控件活动时将相应的按键事件传给它。
  • ICONTROL_Redraw()将控件绘制在屏幕上,这个函数也可以用于控件被覆盖后重画操作。
  • ICONTROL_SetActive()设定控件的活动状态,只有处于活动状态的控件才能接收并处理按键事件,在多控件的对话框中,只有获得焦点的控点是活动的。
  • ICONTROL_IsActive()用于判断控件是否处于活动状态。
  • ICONTROL_SetRect()设定控件所占据的矫形区域,某些控件提供在其中的内容超过控件区域时滚动的功能。正确设定控件矩形外框后,可以在屏幕上同时显示多个控件。
  • ICONTROL_GetRect()取得控件矩形区域。
  • ICONTROL_SetProperties()为控件设定属性,不同的控件所能设定的属性是不同,属性是一个32位整数来表示。
  • ICONTROL_GetProperties()则用于取得控件的当前属性。
  • ICONTROL_Reset()用于释放控件所占用的资源,但并不释放控件指针,一般用于控件的重新初始化。

下面简要介绍一下BREW提供的控件,并对扩展的控件一并作个介绍。

IDateCtl接口

IDateCtl用于需要用户输入日期时,具有两种类型的日期控件:

  • 标准类型日期控件,允许用户通过上、下、左、右键来选择指定的日、月、年。
  • 日期选择控件,显示以月为单位的日历,方向键用于一个月的某天,或是滚动到下个或上个月。

IDATECTL_HandleEvent()处理AVK_SELECT, AVK_UP, AVK_DOWN, AVK_LEFT和 AVK_RIGHT按键事件,当它收到AVK_SELECT按键事件时,将向Applet发送EVT_COMMAND表示用户已选择了某个日期。

IImageCtl接口

这个控件可以显示一个可滚动图象。是对IImage接口的一个封装类。

IMenuCtl接口

Menu控件允许用户从一个列表中作出选择,方向键用于指明某个选项。当前选中的菜单项是高亮形式表示。用于按下AVK_SELECT将向Applet发送EVT_COMMAND表明用户按下了某个菜单项。

有四种类型的菜单控件:

  • 标准的菜单控件。有如一般Window菜单。
  • 列表菜单控件,类似Window平台上不带下拉框的组合框控件。
  • 软按键,显示为在屏幕下方的按钮。
  • 图标菜单。类似Window平台上Listview以Icon形式。

IStatic接口

IStatic显示一个静态文本,和一般Window平台上的Cstatic具有类似的功能。

ITextCtl接口

编辑框控件,可以设置多行或单行,或是显示为密码输入框。

ITimeCtl接口

时间选择控件。有三种形式的时间控件。具体参见API。

上面为BREW提供的几种控件。在实际开发中远远不够使用。随本教程附带了几个扩展控件,它们大部分是从IControl派生出并实现了所有的IControl接口函数。

IButton接口

按钮控件,相当于Command Button。它和Soft Key不同是它可以显示在屏幕的任意地方,而不一定显示屏幕的最下方。可以为button控件指定Caption和背景颜色。

ICheckBox接口

Check box 控件。当其处于活动状态时,高亮显示。用户按下AVK_SELECT键时,切换选择和未选择状态。

IRadioBox接口

Radio box控件,为单选钮。可以在一组互拆的选项中选取其一。当其处于活动状态时,高亮显示。当其一个处于被选择状态时,该组其它按钮自动改为未选取状态。

IProgressBar接口

进程条控件。

IVScrollBar接口

垂直滚动条,该控件不是从IControl派生出来,一般不单独使用,而是作为其它容器类(IFormWin,IScrollWin和IContainer)的一部分,这些类在其中包括的控件超出范围时,自动显示滚动条。

IFormWin 和IScrollWin接口

这两个类都是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类

IContainer类为一容器控件,在其中可以添加其它IControl控件,但它本身是从IWindow派生出来。可以设置AEE_CP_ROWLAYOUT 、AEE_CP_BAGLAYOUT 分别类同IscrollWin和IformWin布局方法。它也提供了AddControl接口函数用于向其中添加IControl控件。能过上、下键在不同的控件上切换焦点,以使控件变为活动状态。而且在控件超出范围时自动显示滚动条。也可以在其中添加一行SoftKey。

抱歉!评论已关闭.