【转】按挂机键后程序退到后台运行,按c键结束程序

http://blog.csdn.net/utopia2006/archive/2008/05/30/2495667.aspx

 

目的:当程序在前台运行时,按挂机键程序不退出,只是退到后台运行,程序在后台运行时,按c键能把程序结束

方法:在HandleWsEventL()中屏蔽挂机键KAknUidValueEndKeyCloseEvent,在值在avkon.hrh中定义,实践中发现8.0sdk的avkon.hrh没有定义KAknUidValueEndKeyCloseEvent,唯有手工添加定义#define  KAknUidValueEndKeyCloseEvent   0x101F87F0

测试:在3230,N70和E61i上测试通过

void CMyClientAppUi::HandleWsEventL(const TWsEvent &aEvent, CCoeControl *aDestination)
{
 switch (aEvent.Type())
 {
 case KAknUidValueEndKeyCloseEvent:
 break;
 default:
 CAknAppUi::HandleWsEventL(aEvent, aDestination);
 }
}
// ----------------------------------------------------
// CPocoClientAppUi::HandleCommandL(TInt aCommand)
// takes care of command handling
// ----------------------------------------------------
//
void CMyClientAppUi::HandleCommandL(TInt aCommand)
{
 switch ( aCommand )
 {
 case EEikCmdExit:
  {
   Exit();    
   break;
  }
  // TODO: Add Your command handling code here
 
 default:
  break;     
 }
 
}

 

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

需要弹出框的话,可参考:http://discussion.forum.nokia.com/forum/showthread.php?t=191426

 

5楼:“非要做的话。。。用一个globalnote,当用户按下“否”的时候,再把自己切到前台。”

6楼:

void CBTAlarmAppUi::HandleWsEventL(const TWsEvent &aEvent,
  CCoeControl *aDestination)
 {
 if (KAknUidValueEndKeyCloseEvent == aEvent.Type())//为挂机键时
  {
  TInt flag;
  flag = ShowGlobalConfirmDialogL(_L("are you sure close application?"));
  //close the application
  if (flag)
   {
   Exit();
   }
  //bring to front
  else
   {
   TApaTask task(iEikonEnv->WsSession());
   task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
   task.BringToForeground();
   }
  }
 else
  CAknAppUi::HandleWsEventL(aEvent, aDestination);

 }

TInt CBTAlarmAppUi::ShowGlobalConfirmDialogL(const TDesC& aText)
 {
 CAknGlobalConfirmationQuery* iGlobalConfirmationQuery =
   CAknGlobalConfirmationQuery::NewL();

 TRequestStatus aStatus;
 iGlobalConfirmationQuery->ShowConfirmationQueryL(aStatus, aText);//, 0, 0, KNullDesC, 0, 0, CAknQueryDialog::ENoTone, EFalse);

 User::WaitForRequest(aStatus);

 if (aStatus.Int() == 3005)
  return 1;
 else
  return 0;
 }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值