CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  移动平台 >  Symbian

实现热键的功能。

楼主baiyang3721(小白)2006-03-04 15:16:12 在 移动平台 / Symbian 提问

我的程序在按下option后弹出功能菜单,有5项,  
  我要实现在功能菜单出现后,按下1、2、3、4、5按键时分别调用这5项。 问题点数:50、回复次数:4Top

1 楼chenziteng(陈子腾)回复于 2006-03-04 19:03:43 得分 0

.  
    我想到了两个可行的方案  
   
  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;  
          }  
   
    第一个方案没有做验证,因为理论上跟使用一般的ListBox一样。  
    第二个方案做了示例程序,如果感兴趣的话可以给我发mail索取:  
  chenziteng@163.com  
  Top

2 楼chenziteng(陈子腾)回复于 2006-03-04 19:04:03 得分 0

http://community.csdn.net/Expert/topic/4592/4592523.xml?temp=.6840326Top

3 楼chenziteng(陈子腾)回复于 2006-03-04 19:04:47 得分 0

-_-#Top

4 楼chenziteng(陈子腾)回复于 2006-03-04 19:14:19 得分 0

因为S60的菜单本身不支持Hotkey功能,所以只能想其它方法实现,我提的方案未必是最简单的,但已经是我能想出来的最简单的了。Top

相关问题

  • 用pb如何实现用热键调出程序的功能
  • 高手救命!!用pb如何实现用热键调出程序的功能
  • 100分请教:如何实现热键呼出功能????分数不够可以再加!
  • 如何实现系统级热键?
  • 怎么实现像QQ热键设置一样的热键程序
  • 怎样实现热键激活后台进程??
  • 如何实现热键呼出后台程序?
  • 麻烦一下,如何实现用户自定义热键呀?
  • 请问C#.net里面怎么实现 button的热键
  • 热键

关键词

  • 控件
  • 菜单
  • 弹出
  • 按键
  • 功能
  • 方案
  • 撤消
  • 实现
  • 程序
  • 处理

得分解答快速导航

  • 帖主:baiyang3721

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo