这篇文章主要讲述如何控制应用程序的行为,你将学会判断应用程序何时获得和失去焦点(focus)
并知道如何来处理它。
1、获知焦点的变化
当一个应用程序获得或失去焦点时,Series 60 框架(framework)会调用函数
CAknAppUi::HandleForegroundEventL(TBool aForeground)来通知应用程序。如果你的应用程序获得焦点
那么aForeground参数值为ETrue,而如果失去焦点,其值为EFalse.
如果你需要做些特殊的工作,你应该重写(override)这个函数(并且调用基类的这个函数)。在下面
这个例子中,应用程序不想失去焦点。 译者注:原文为Here is an example for an application that
don‘t want to loose the focus
void CMyAppUi::HandleForegroundEventL(TBool aForeground)
{
//调用基类函数
CAknAppUi::HandleForegroundEventL(aForeground);
if(aForeground)
{
// 已经获得焦点
...
}
else
{
//已经失去焦点
...
}
}
2、切换程序的焦点
你也可以要求改变应用程序的焦点,即在前后台之间切换程序。这将用到以下命令
TApaTask::SendToBackground()和TApaTask::BringToForeground().下面这个例子将向你展示如何在
Appui里使用这两个命令。
void CMyAppUi::BringToForeground()
{
// 构造(Construct)一个空的TApaTask对象
// 给它一个指向Window Server session的引用(reference)
TApaTask task(iEikonEnv->WsSession( ));
// 用我们的应用程序的窗口组id(window group id)初始化(Initialise)这个对象
// 这样这个TApaTask对象将代表我们的程序
task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
// 请求 window server 把我们的程序放到前台(foreground)
task.BringToForeground();
}
下面的代码我没有测试过,但你可能能利用它来控制其它应用程序的焦点:
// 把名字是"theApp"的应用程序放到后台(background)
TApaTaskList tasklist(iCoeEnv->WsSession());
TApaTask task(tasklist.FindApp(_L("theApp")));
task.SendToBackground(); // or BringToForeground()
并知道如何来处理它。
1、获知焦点的变化
当一个应用程序获得或失去焦点时,Series 60 框架(framework)会调用函数
CAknAppUi::HandleForegroundEventL(TBool aForeground)来通知应用程序。如果你的应用程序获得焦点
那么aForeground参数值为ETrue,而如果失去焦点,其值为EFalse.
如果你需要做些特殊的工作,你应该重写(override)这个函数(并且调用基类的这个函数)。在下面
这个例子中,应用程序不想失去焦点。 译者注:原文为Here is an example for an application that
don‘t want to loose the focus
void CMyAppUi::HandleForegroundEventL(TBool aForeground)
{
//调用基类函数
CAknAppUi::HandleForegroundEventL(aForeground);
if(aForeground)
{
// 已经获得焦点
...
}
else
{
//已经失去焦点
...
}
}
2、切换程序的焦点
你也可以要求改变应用程序的焦点,即在前后台之间切换程序。这将用到以下命令
TApaTask::SendToBackground()和TApaTask::BringToForeground().下面这个例子将向你展示如何在
Appui里使用这两个命令。
void CMyAppUi::BringToForeground()
{
// 构造(Construct)一个空的TApaTask对象
// 给它一个指向Window Server session的引用(reference)
TApaTask task(iEikonEnv->WsSession( ));
// 用我们的应用程序的窗口组id(window group id)初始化(Initialise)这个对象
// 这样这个TApaTask对象将代表我们的程序
task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
// 请求 window server 把我们的程序放到前台(foreground)
task.BringToForeground();
}
下面的代码我没有测试过,但你可能能利用它来控制其它应用程序的焦点:
// 把名字是"theApp"的应用程序放到后台(background)
TApaTaskList tasklist(iCoeEnv->WsSession());
TApaTask task(tasklist.FindApp(_L("theApp")));
task.SendToBackground(); // or BringToForeground()