菜单控件使用心得和理解

简介: 首先是REFERENCE: 调用 ISHELL_CreateInstance() 创建文本控件实例。 调用 ITEXTCTL_SetRect() 指定包含文本控件的屏幕矩形。

首先是REFERENCE:

调用 ISHELL_CreateInstance() 创建文本控件实例。
调用 ITEXTCTL_SetRect() 指定包含文本控件的屏幕矩形。
指定屏幕矩形后,调用 ITEXTCTL_SetTitle() 或 ITEXTCTL_SetText() 指定控件的标题及控件的文本字符串初始值。
调用 ITEXTCTL_SetProperties() 设置文本控件属性。
调用 ITEXTCTL_SetSoftKeyMenu() 指定与该文本控件关联的软键菜单
(如果有)。
调用 ITEXTCTL_SetActive() 激活文本控件并在屏幕上显示其内容。
文本控件激活时,调用 ITEXTCTL_HandleEvent() 向它传递用户生成的所有按键事件。
当设备用户完成文本输入时,调用 ITEXTCTL_GetText() 或 ITEXTCTL_GetTextPtr() 获取设备用户输入的文本(如果使用软键菜单,设备用户可以使用菜单中的“完成”项指示文本输入结束,如果没有软键菜单则可以按“选择”键或其它键)。
如果不再需要文本控件,调用 ITEXTCTL_Release() 将其释放。、

NEED: AEEText.h

接下来简单介绍下我的示例代码结构:

 Init(pMe); 放置于EVT_APP_START 事件的处理中,作一个初始化;在APPLET结构中增加一个(ITextCtl *)类型pCtl指针;

reference的1-6步均在INIT函数中实现(步骤5省略);

编写代码遇到的主要问题就是在事件处理的安排上。

根据第7条,我们应该调用ITEXTCTL_HandleEvent()向它传递用户生成的所有按键事件;那么 在哪里调用它呢?

如果按键事件不能够正确的传递,那么事件处理也就无从谈起,即使正确的编写了事件处理的代码也没办法得到执行。

我们知道,按键会产生EVT_KEY消息发送到APPLET中;那么除了个别我们感兴趣的键(如AVK_SELECT),其余的键消息我们都可以让它们落入switch循环的default当中,那么要使按键消息得到正确的处理,就要在这里调用itextctl_handleEvent()。

具体代码:
 default:
    if(pMe->pCtl)
    {
     if(ITEXTCTL_HandleEvent(pMe->pCtl,EVT_KEY,wParam,dwParam))
      return  TRUE;
    }

步骤8我们在AVK_SELECT的消息处理中实现;在GETTEXT之后,因为我们已经不再需要文本控件,所以迅速调用Release将其释放,这样也就完成了步骤9。

我们通过这样一个简单的例子,走完了reference中的全部步骤,也成功的实现了一个ITEXTCTL的应用。结合下面的文档:

除了IAPPLET具有handleevent外,所有的继承Icontrol接口的Interface也具有事件处理函数,允许处理事件。这些各种具体的Icontrol_handleevent有两种方式被调用。一种是在applethandleevent中由programmer显式的调用,如:
switch (eCode) 
{
      case EVT_APP_START:                              
    ………
        return(TRUE);
      case EVT_APP_STOP:    
……….
          Case EVT_KEY:
IMENU_Handleevent….
ItextCtl_Handleevent….
另一种是当这些Control包含于Dialog中,且处于focus状态时,这些事件处理函数的触发是隐式的,是由AEE机制自动触发的,无需在代码中显式的调用这些handleEvent
Idialog
接口没有外露的handleevent接口函数,但是允许通过Idialog_seteventhandle来注册一个该Dialog的事件处理函数。需要注意的是,该事件处理函数是何时被触发的:一旦当一个dialog处于active时,aee shell将会把所有的event直接发往该dialog,该dialog会自动的调用处于focuscontrolhandleevent来处理该事件,只有当该control没有处理该事件时,dialog注册的事件处理函数才会被调用。
Brew
中的handle event函数都是boolean返回类型的,这是为了实现事件处理的层次机制,当该层上的handle event没有处理该事件时,应该返回false,以便上层对该事件感兴趣的handle event来处理。 如果处理了,应该返回TRUE,说明该事件已被处理,无需其他层再处理。

对照我们的示例代码,可以更深刻的理解Brew消息处理机制。

(完)

目录
相关文章
|
XML 测试技术 API
【Android开发日常】一文弄懂桌面图标快捷菜单 & 桌面小组件
开发可以定义快捷方式,以便在应用中执行特定操作。 这些快捷方式可在受支持的启动器或助理(如 Google 助理)中显示,方便用户快速启动应用中的常见任务或推荐任务。 通过本文你还将了解一些可提升快捷方式效果的最佳做法。
1087 1
零基础VB教程048期:如何制作自己的记事本第3节?statusbar控件以及菜单栏
零基础VB教程048期:如何制作自己的记事本第3节?statusbar控件以及菜单栏
104 0
|
存储 前端开发 程序员
iOS开发:实现点击常用控件弹出地区选择框(万能方法)
在iOS开发中会遇到一些选择选项的需求,而且点击一个控件弹出一个选择框,选择之后展示到前端,然后再把选择的内容传给后台或者做本地存储。这个需求对于大多数开发者来说可以为小儿科,但是作为一个爱记录的程序猿来说相当可贵,所以还是那句话,只分享给有缘人,大牛可以飘过,不喜勿喷请走开。
441 0
iOS开发:实现点击常用控件弹出地区选择框(万能方法)
|
Java C# 索引
C#编程-50:菜单控件复习笔记
C#编程-50:菜单控件复习笔记
142 0
AppleWatch开发入门五——菜单控件的使用
AppleWatch开发入门五——菜单控件的使用
204 0
AppleWatch开发入门五——菜单控件的使用
|
C# C++
C# WPF 左侧菜单右侧内容布局效果实现
原文:C# WPF 左侧菜单右侧内容布局效果实现 我们要做的效果是这样的,左侧是可折叠的菜单栏,右侧是内容区域,点击左侧的菜单项右侧内容区域则相应地切换。 wpf实现的话,我的办法是用一个tabcontrol,修改tabcontrol的样式模板,首先将控件的TabStripPlacement设置为left使tabcontrol的item header部分靠左内容靠右,然后用一个Expander将TabPanel包住实现可折叠菜单效果,最后就是把用到的控件样式修改一下即可。
5041 0
|
数据安全/隐私保护
|
Web App开发 JavaScript 前端开发