第十章 IMenuCtl 使用简介
一、主要内容
(1)、描述IMenuCtl控件的类型,所能提供的操作以及重要属性
(2)、启动事件代理机制
(3)、利用IMenuCtl进行程序开发
二、IMenuCtl概述
(1)、所谓菜单,就应该能让用户通过按“上”、“下”、“左”、“右”键来浏览所有可供选择的菜单选项,并将用户所选中的选项与别的选项区分开来
(2)、当用户按“选择”键时,EVT_COMMAND事件就会被发回给您的应用程序的事件处理函数
三、IMenuCtl控件类型
(1)、标准菜单(Standard menu control):ClassID为:AEECLSID_MENUCTL
(2)、List control:ClassID为: AEECLSID_LISTCTL
(3)、SoftKey menu control:ClassID为:AEECLSID_SOFTKEYCTL
(4)、Icon-view menu control:ClassID为: AEECLSID_ICONVIEWCTL
四、IMenuCtl使用手册
(1)、调用ISHELL_CreateInstance()创建一个菜单的实例,此时可根据需要输入不同的ClassID,创建不同类型的菜单;
(2)、调用IMENUCTL_SetRect()设置菜单显示的位置。如果没有设置,则默认显示区域为整个屏幕区域;
(3)、利用IMENUCTL_SetTitle()设置菜单标题;
(4)、调用IMENUCTL_AddItem()或IMENUCTL_AddItemEx()添加所需的菜单选项;
(5)、调用IMENUCTL_SetActive()将菜单设置为活动状态,以便接收用户的各种操作信息;
(6)、当不再使用菜单接口时,调用IMENUCTL_Release()对已申请的菜单资源进行释放。
五、IMenuCtl 属性
MP_WRAPSCROLL
MP_NO_ARROWS
MP_NO_REDRAW
MP_MAXSOFTKEYITEMS
MP_CALENDAR
MP_AUTOSCROLLTIME
MP_ICON_TEXT_TOP
MP_ICON_SINGLE_FRAME
MP_UNDERLINE_TITLE
注意:
每一个属性可能对1种或多种类型的菜单起作用,具体信息请参看BREW APIReference。
六、利用IMenuCtl操作的主要函数
IMENUCTL_SetTitle()
IMENUCTL_AddItem()
IMENUCTL_GetItemCount()
IMENUCTL_GetItem()
IMENUCTL_SetItem()
IMENUCTL_DeleteItem()
IMENUCTL_GetProperties()
IMENUCTL_SetProperties()
IMENUCTL_SetColors()
IMENUCTL_SetStyle()
IMENUCTL_IsActive()
IMENUCTL_SetActive()
七、启动事件代理机制
(1)、BREW Applet采用基于事件驱动的机制,每个BREW应用程序只需处理自己感兴趣的事件。
(2)、在处理事件时,某些特定的事件可以传给一些特定的接口,让其进行处理。如让光标在不同的菜单选项间切换,根据不同的输入法映射不同的输入内容等,就可通过如下的两个函数启动事件代理机制来完成:
(a)、IMENUCTL_HandleEvent()
(b)、ITEXTCTL_HandleEvent()
(3)、当“选择”键被按下的时候,事件处理权将传回给应用程序
(a)、EVT_COMMAND 就会被传回给该Applet的事件处理函数
八、事件代理机制的灵活性
九、事件代理示意图
十、利用IMenuCtl进行程序开发
综上所述,在设计菜单选项时需完善如下的几方面:
(1)、按照使用手册设计菜单选项;
(2)、利用IMENUCTL_HandleEvent()启动事件代理机制;
(3)、处理EVT_COMMAND事件,收回事件处理权;
(4)、处理EVT_APP_SUPPEND,EVT_APP_RESUME事件,以使程序能处理来电、来电结束等情况。
十一、本章关键点
(1)、菜单的种类
(2)、菜单的使用方法
(3)、事件代理机制
十二、问题回顾
(1)、BREW支持几种类型的菜单形式?他们分别是什么?
(2)、开发者如何知道用户按下了“选择”键,确定了其选择的菜单项?如何知道用户选择了哪个选项?