S60用户界面控件设计(一)

概要
*UI控件
 - 控件栈
 - 按键事件流
*预定义控件
 - Menu(菜单)
 - Dialog(对话框)
 - Note(通知对话框)
 - Query(输入对话框)
 - Editor(编辑器)
 - Form(表单)


UI
*控件的作用是
 - 为用户显示信息
 - 对按键事件做出响应
*从CCoeControl继承

控件栈
*控件栈处理不同控件间的按键事件流
*由AppUi所有
*控件需要注册到控件栈来获得按键事件
 - CCoeAppUi::AddToStackL(...)
  @注册到控件栈
 - CCoeAppUi::RemoveFromStack(...)
  @取消与控件栈的注册
 - CCoeControl::OfferKeyEventL(...)
  @重写CCoeCoontrol派生类来获得按键事件

 
控件栈-示例
*与控件栈注册
 void CMyAppUi::ConstructL()
 {
  BaseConstructL();
  iAppContainer = CMyContainer::NewL(ClientRect());
  AddToStackL(iAppContainer);
 }
*与控件栈取消注册
 CMyAppUi::~CMyAppUi()
 {
  if(iAppView)
  {
   RemoveFromStack(iAppContainer);
   delete iAppView;
  }
 }
*接收按键事件
TKeyResponse CMyContainer::OfferKeyEVentL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
 TKeyRespose ret = EKeyWasNotConsumed;

 if(aType == EEventKey)
 {
  switch(aKeyEvent.iCode)
  {
   case EKeyLeftArrow;
   // 将球左移
   ...
   ret = EKeyWasConsumed;
   break;
   ...
  }
 }
 
 return ret;
}

 

事件流
*控件栈中往往有多个控件
*控件根据AddToStackL()的参数按照优先级高低(高者先接收)来接收事件
 - 软健:ECoeStackPriorityCba(=60)
 - 对话框:ECoeStackPriorityDialog(=50)
 - 菜单:ECoeStackPriorityMenu(=10)
 - 其他控件默认值:ECoeStackPriorityDefault(=0)
*相同优先级的控件按照注册的顺序来接收事件
*如果控件对某个事件不关注,则返回EKeyWasNotConsumed,该值将传递至其他的控件
*控件如果处理事件则返回EKeyWasConsumed

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值