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;
}