Jiang's C++ Space

创作,也是一种学习的过程。

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
Windows Mobile如何让应用程序全屏显示,网上问这个问题的人很多,你也能轻松找到答案,但很多人反映效果不完美,如切换程序后又没了全屏效果,这次我花了些时间整理出我的实现,当然我也不保证我的就很完美,但至少在我用了这么久之后发觉自己这种方法还是蛮可靠的。

所谓全屏,也就是让应用程序窗口占满整个屏幕,任务栏不显示,菜单栏不显示,另外顺便在这里普及下知识,什么叫任务栏(Task Bar),什么叫菜单栏(Menu Bar),什么是开始图标(Start Icon),什么是软输入法按钮(SIP Button)。直接看图:

通过上图,我想大家也都了解怎么回事了,真是长篇大论不如一张小图。任务栏你可以理解为Windows Mobile的一部分,跟Windows的任务栏一样,是一直存在的,开始图标就处于任务栏的左边,跟Windows不一样的是Windows Mobile的任务栏一般处于屏幕顶端;而菜单栏则跟Windows的菜单也有点像,它属于应用程序的一部分,当应用程序不创建它的时候,它就是不存在的,当然了,它和Windows的菜单一样,并不包含在窗口客户区内。

知道这个之后,那我们的工作就比较明确了:第一,不要创建菜单栏;第二:隐藏掉任务栏或者把任务栏放在我们的窗口的下面。当然了,还要把窗口调整为屏幕大小。就这么多了。相应的API为SHFullScreen,看一下MSDN,貌似很简单,OK,直接在WM_CREATE中加入SHFullScreen(SHFS_HIDETASKBAR)如何?

结果没有反应,再仔细看看MSDN的说明,对于SHFS_HIDETASKBAR参数有以下描述:It is the responsibility of the application to make sure it is sized FULL SCREEN before using this flag. Otherwise, it will appear as though the function did nothing。注意“before”这个词,看来我们要在掉SHFullScreen之前将窗口位置及大小调整为全屏。代码:
RECT rectFullScreen; 
SetRect(
&rectFullScreen, 00, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
SetWindowPos(hWnd, 
0, rectFullScreen.left, rectFullScreen.top, rectFullScreen.right-rectFullScreen.left, rectFullScreen.bottom-rectFullScreen.top,SWP_NOZORDER);
SHFullScreen(hWnd, SHFS_HIDETASKBAR);
这样就能够全屏了,但还不够,为什么?也许你注意到软输入法按钮并没有被隐藏掉,你再试试看再打开一个程序,然后回到你的全屏程序去,这时候你发觉全屏变成了非全屏了,如图:

所以我们还得做些事情,我直接给出代码:
case WM_ACTIVATE:
    
//Try to hide the boring SIP button.
    {
        DWORD dwHideOption 
= SHFS_HIDESIPBUTTON;
        
if(g_bFullScreenState)
            dwHideOption 
|= (SHFS_HIDETASKBAR);
        
if(wParam==WA_ACTIVE || wParam==WA_CLICKACTIVE)
            SHFullScreen(hWnd, dwHideOption);
    }
    
// Notify shell of our activate message
    SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
    
break;
其中的“g_bFullScreenState”是程序记录是否全屏状态的一个布尔型变量,然后你再试试,我不确切在你机器上是否OK,但在我这里尝试了6.0和6.5的机器,都是没问题的,你把程序切来切去都是可以保证看到它全屏的,而且全屏与非全屏间还可以自由切换。这是我写的demo的截图:
posted on 2010-08-03 10:09 Jiang Guogang 阅读(1442) 评论(1)  编辑 收藏 引用 所属分类: Windows Embedded Programming

评论

# re: Windows Mobile程序全屏与非全屏 2010-08-03 10:57 Matthew
强悍的男人.....下次给我弄个程序玩玩  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理