首先,需要使程序有獲知焦點變化的能力。具體通過在AppUI類中重載CAknAppUi:: HandleForegroundEventL(TBool aForeground )函數(shù)來實現(xiàn)。
其次,在獲知焦點變化的同時,改變應(yīng)用程序的焦點,通過TApaTask::SendToBackground()和TApaTask::BringToForeground()兩個函數(shù)來實現(xiàn)。由于這里用到的TApaTask類,需要包含APGTASK.H和apgrfx.lib。
再次,因為需要在調(diào)用其上函數(shù)時,必須用我們的應(yīng)用程序的窗口組id(window group id)初始化(Initialise) TApaTask這個對象,這個實現(xiàn)需要用到,獲取當(dāng)前應(yīng)用程序窗口組id的函數(shù)CEikonEnv::Static()->RootWin().Identifier()。剛好以上函數(shù)又要包含w32std.h和w32.lib。
l 具體實現(xiàn)代碼如下:
void CHelloUIAppUi::HandleForegroundEventL(TBool aForeground)
{
if(aForeground)
{
TApaTask task ( CEikonEnv::Static()->WsSession() );
task.SetWgId( CEikonEnv::Static()->RootWin().Identifier() );
//Foreground run
task.BringToForeground();
ActivateLocalViewL(iHelloUIContainerView->Id());
}
else
{
TApaTask task ( CEikonEnv::Static()->WsSession() );
task.SetWgId( CEikonEnv::Static()->RootWin().Identifier() );
//background run
task.SendToBackground();
}
}