一、获得、失去焦点
应用程序获得、失去焦点时,Series60框架通过调用CAknAppUi::HandleForegroundEventL(TBool aForeground) 通知应用程序。获得焦点时参数aForeground值为ETrue ,否则为EFalse。
通常下列事件将导致当前应用程序失去焦点:
- 另一个应用程序启动
- 弹出系统消息对话框。如通知“电量不足,请充电”的dialog
- 用户切换到桌面
- 收到新的信息或来电
如果应用程序需要对获得、失去焦点做出特别的响应,必须重载上面的函数。如下面的例子:
// Handle any change of focus void CFocusEventAppUi::HandleForegroundEventL(TBool aForeground) { if(!aForeground) { // 失去了焦点
} else { // 获得了焦点
} // 调用默认基类方法 CAknAppUi::HandleForegroundEventL(aForeground); }
二、改变焦点
应用程序还可以主动请求改变其焦点(一般用于视图架构)。方法是:TApaTask::SendToBackground() 和TApaTask::BringToForeground().
下面的代码将演示如何使用它们:(代码来自http://www.newlc.com/article.php3?id_article=141)
void CMyAppUi::BringToForeground() { // Construct en empty TApaTask object // giving it a reference to the Window Server session TApaTask task(iEikonEnv->WsSession( )); // Initialise the object with the window group id of // our application (so that it represent our app) task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
// Request window server to bring our application // to foreground task.BringToForeground(); }
下面的代码经我的测试是可行的
// Bring the application "theApp" to background TApaTaskList tasklist(iCoeEnv->WsSession()); TApaTask task(tasklist.FindApp(_L("theApp"))); task.SendToBackground(); // or BringToForeground()
三、Summary
演示了AppUi的HandleForgroundEventL ()方法和应用程序主动请求改变Foucs的方法 |