franksunny的个人技术空间
获得人生中的成功需要的专注与坚持不懈多过天才与机会。 ——C.W. Wendte

首先,需要使程序有获知焦点变化的能力。具体通过在AppUI类中重载CAknAppUi:: HandleForegroundEventL(TBool aForeground )函数来实现。

其次,在获知焦点变化的同时,改变应用程序的焦点,通过TApaTask::SendToBackground()TApaTask::BringToForeground()两个函数来实现。由于这里用到的TApaTask类,需要包含APGTASK.Hapgrfx.lib

再次,因为需要在调用其上函数时,必须用我们的应用程序的窗口组id(window  group  id)初始化(Initialise) TApaTask这个对象,这个实现需要用到,获取当前应用程序窗口组id的函数CEikonEnv::Static()->RootWin().Identifier()。刚好以上函数又要包含w32std.hw32.lib

l         具体实现代码如下:

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();

       }

}

 

posted on 2008-05-09 22:45 frank.sunny 阅读(3708) 评论(2)  编辑 收藏 引用 所属分类: symbian 开发

FeedBack:
# re: 如何实现程序的前后台运行切换
2008-08-28 04:04 | Coastline
请教,如果是console exe,没有图形框架的支持,如何获取WindowGroup的焦点切换事件?  回复  更多评论
  
# re: 如何实现程序的前后台运行切换
2008-08-28 10:28 | frank.sunny
以上这个实例之所以放在HandleForegroundEventL函数中,只是为了直观和便于理解

在具体编程时,程序需要切换的时候可以遍历任务列表,让找到的任务切换到前台。假如某些程序做了优化任务列表隐藏了的话,我们可以考虑在进程列表内进行查找,然后将这个任务通过SendToBackground和BringToForeground函数进行切换  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



常用链接

留言簿(13)

随笔分类

个人其它博客

基础知识链接

最新评论

阅读排行榜

评论排行榜