第十章 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)、開發者如何知道用戶按下了“選擇”鍵,確定了其選擇的菜單項?如何知道用戶選擇了哪個選項?