BREW菜单使用
by 王本力 2009.09.03
菜单是建立用户界面最常用的工具, 按形式分类,有主功能菜单, 弹出式菜单和下拉式菜单, 在无线设备中最常用的就是主功能菜单和弹出式菜单了.
菜单的建立
一种方法是将菜单项放入资源中, 在需要的时候装载进来,这样比较简单,而且可以不用改变代码只改变资源就可以完成语言转换, 但灵活性差一点.
另一种方法就是在程序中实时生成菜单,这样灵活性好一些,但是改变语言时可能需要重新编译.
总之各有优缺点,应根据情况酌情使用.
菜单操作
菜单操作的接口是以IMENUCTL_开头的一组接口, 具体每个接口的说明参考BREW API解释,也可以直接参考声明这些接口的头文件.
一个标准菜单的建立一般需要四个步骤:
第一, 初始化, 使用下面接口完成:
IMenuCtl* pMenuCtl; //define a menu object
IMENUCTL_Reset( pMenuCtl );
IMENUCTL_SetActive(pMenuCtl, FALSE );
第二, 增加菜单项
CtlAddItem rMenuItem; //define a item object
rMenuItem.pText = NULL;
rMenuItem.pImage = NULL;
rMenuItem.pszResImage = rMenuItem.pszResText = ;//resource file name
rMenuItem.wFont = ;//AEE_FONT_NORMAL
rMenuItem.wText = ;//text id
rMenuItem.wImage = ;//icon id
rMenuItem.wItemID = ;//used for command
IMENUCTL_AddItemEx( pMenuCtl, &rMenuItem );
/*add other items*/
rMenuItem.wText = IDC_COLOR;
rMenuItem.wImage = IDB_COLOR;
rMenuItem.wItemID = IDC_COLOR;
IMENUCTL_AddItemEx( pMenuCtl, &rMenuItem );
... ... ...
第三, 设置菜单样式
AEEItemStyle nNormal;
AEEItemStyle nSel;
IMENUCTL_SetStyle(pMenuCtl,&nNormal;&nSel);
//boolean IMENUCTL_SetTitle(IMenuCtl * pIMenuCtl, const char * pszResFile, uint16 wResID,
AECHAR * pText)
第四, 设置菜单属性并显示
AEERect nRect;
IMENUCTL_SetProperties( pMenuCtl,
IMENUCTL_GetProperties( pMenuCtl ) & ~(MP_ICON_TEXT_TOP) );//etc
SETAEERECT( &nRect, x, y, dx, dy );
IMENUCTL_SetRect( pMenuCtl, &nRect );
IMENUCTL_SetActive( pMenuCtl, TRUE );
一般执行了这四个步骤就基本可以正常使用菜单了, 在创建菜单的时候一定要严格,考虑周全.
还有菜单中所有的按键处理都放在了 IMENUCTL_HandleEvent()中处理, 当它收到 AVK_SELECT
后,它并不直接处理, 而是将该事件转换为 EVT_COMMAND 再发给当前的 applet, 相当于执行了
ISHELL_PostEvent(ISHELL, EVT_COMMAND, ID, dw), 这里的 ID 就是增加菜单时给的 itemID 值.
某些按键事件如果你希望自己处理,可以在调用 IMENUCTL_HandleEvent()之前将它们给过滤掉,也
就是不交给该函数处理.
在 BREW 中,softkey 也做为 menu 的一种出现.
那么这个菜单所有项加起来高度有多高呢?因为采用了三维显示, 可以认为每一项的高度都是字符
高度加上上下边框的宽度 4(pixel).当然这还跟每一项前面的图片高度有关.