实现热键的功能


程序 在按下option后弹出功能菜单,有5项,
我要实现在功能菜单 出现后,按下1、2、3、4、5按键时分别调用这5项。
我想到了两个可行的方案
1. 使用CAknPopupList
  Popup List在外观上跟菜单很像,因此你完全可以定制一个Popup List,在用户按左软键时弹出,选择某项时撤消。
  SDK中的"/Series60Ex/popuplist"示例程序讲了CAknPopupList的用法。
2. 调整控件 在控件堆栈中的优先级
  在把控件 加入到控件堆栈中时指定一个比较高的优先级,这样的话无论有什么按键都会先交给它处理。例如:
void CMyAppUi::ConstructL()
    {
    ...
    AddToStackL( iAppContainer,ECoeStackPriorityDialog );
    ...
    }
  在弹出菜单 时系统会调用DynInitMenuPaneL(),在这个函数 时你可以标明菜单已经弹出来了
void CMyAppUi::DynInitMenuPaneL(...)
    {
    ...
    iPopup = ETrue;
    ...
    }
  而AppUi处理完菜单命令之后可以认为菜单已经撤消了
void CMyAppUi::HandleCommandL(...)
    {
    iPopup = EFalse;
    ...
    }

  在控件的OfferKeyEventL()里处理按键
   void CMyContainer::OfferKeyEventL(...)
       {
    if(!iMyAppUi->Popup()) // 如果菜单未弹出则不处理
        {
        return EKeyWasNotConsumed
        }
    if(aType == EEventKey)
        {
        // 如果用户在菜单 弹出时按了"1"
        if(aKeyEvent.iCode=='1')
            {
            // 模拟按键,撤消菜单
            TRawEvent key;
            key.Set(TRawEvent::EKeyDown, 165);
            iCoeEnv->WsSession().SimulateRawEvent(key);
            User::After(500000); // 延迟一小会儿
            // 处理菜单 命令
            iMyAppUi->HandleCommandL(...);
            return EKeyWasConsumed;
            }
        }
    return EKeyWasNotConsumed;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值