首 页 | 新 闻 | Symbian | Windows Mobile| J2ME | 下载中心 | 游戏策划 | 购书指南 | 移动开发视频教程
您现在的位置: 开发视界 >> 专家专栏 >> cofd >> Symbian >> 文章正文
处理应用程序Focus event
作者:cofd    文章来源:本站原创    更新时间:2005-8-30 3:05:24

一、获得、失去焦点

      应用程序获得、失去焦点时,Series60框架通过调用CAknAppUi::HandleForegroundEventL(TBool aForeground) 通知应用程序。获得焦点时参数aForeground值为ETrue ,否则为EFalse。

      通常下列事件将导致当前应用程序失去焦点:

  1. 另一个应用程序启动
  2. 弹出系统消息对话框。如通知“电量不足,请充电”的dialog
  3. 用户切换到桌面
  4. 收到新的信息或来电

      如果应用程序需要对获得、失去焦点做出特别的响应,必须重载上面的函数。如下面的例子:

// 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的方法

相关文章:
对解决方案经理艾迪麦克尼尔的采访
使用开发者平台为S90系列手机开发移动应用程序
Symbian sdk帮助-术语表A
hellogui.app
S60应用(1)
高级设计
本地化
S60平台游戏基础