ITPub博客

首页 > Linux操作系统 > Linux操作系统 > AP的全屏与非全屏的切换

AP的全屏与非全屏的切换

原创 Linux操作系统 作者:iwinembed 时间:2009-07-10 18:08:41 0 删除 编辑
1.实现全屏

        RECT   rc; 
      SetRect(&rc,   0,   0,   GetSystemMetrics(SM_CXSCREEN),   GetSystemMetrics(SM_CYSCREEN)); 
     ::MoveWindow(m_hWnd,   rc.left,   rc.top,   rc.right,   rc.bottom,   TRUE); 
      ::SHFullScreen(m_hWnd,   SHFS_HIDETASKBAR   |   SHFS_HIDESIPBUTTON   |     SHFS_HIDESTARTICON); 
在你的消息响应函数中加入上面的代码就可以全屏了,无开始菜单,无输入法。

2.恢复正常显示

RECT   rc; 
   SetRect(&rc,   0,   0 + GetSystemMetrics(SM_CYCAPTION),   GetSystemMetrics(SM_CXVIRTUALSCREEN),   GetSystemMetrics(SM_CYVIRTUALSCREEN) - GetSystemMetrics(SM_CYMENU) - GetSystemMetrics(SM_CYCAPTION) + 3);   //这里有个“ + 3” 实在是没办法。
   ::MoveWindow(m_hWnd,   rc.left,   rc.top,   rc.right,   rc.bottom,   TRUE); 
   ::SHFullScreen(m_hWnd,   SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON   | SHFS_SHOWSTARTICON); 

代码中注释的地方是为了处理客户区的高度不够,在下面会有一条黑线,谁有更好的办法可以交流下。

3.菜单的显示与隐藏。

   //创建菜单
SHMENUBARINFO   mbi; 
   memset(&mbi,   0,   sizeof(SHMENUBARINFO)); 
   mbi.cbSize           =   sizeof(SHMENUBARINFO); 
   mbi.dwFlags   =   SHCMBF_HMENU; 
   mbi.hwndParent   =   m_hWnd; 
   mbi.nToolBarId   =   IDR_MENUBAR1; 
   mbi.hInstRes      =   _Module.GetModuleInstance(); 
   SHCreateMenuBar(&mbi);

   //隐藏菜单
   HWNDhwndMB = SHFindMenuBar (m_hWnd);
   ::ShowWindow(hwndMB,SW_HIDE); //这里写成 ::ShowWindow(hwndMB,SW_SHOWMAXIMIZED); 会出现菜单全屏的奇观,哈哈。

   // 恢复菜单的显示
   ::ShowWindow(hwndMB,SW_SHOW);  
在恢复菜单显示的时候,菜单的句柄hwndMB,只能用上面得到的,如果这里再用 SHFindMenuBar (m_hWnd); 得到的会是一个NULL。我猜测是因为被隐藏了,所以才这样。


关于全屏。在csdn上还有一些代码片段。

要在dlg初始化的时候加入。

   SHINITDLGINFO shidi; 
   ZeroMemory(&shidi,   sizeof(shidi)); 
   shidi.dwMask   =   SHIDIM_FLAGS; 
   shidi.dwFlags   =    SHIDIF_FULLSCREENNOMENUBAR | SHIDIF_SIPDOWN;
   shidi.hDlg   =   m_hWnd; 
   if(!SHInitDialog(&shidi)) 
   { 
       return   FALSE; 
   } 
这段代码也可以做到。不过我更喜欢上面的那两段代码。呵呵

--------以下文字为 2008.10.6补充----------

     今天尝试采用全屏窗口假透明的方式来实现一个 lockscreen 。发现全屏有点小问题。

1.在dlg 或者 view 中直接执行上面列出的代码。手机屏幕顶部的开始菜单栏不能隐藏。在窗体创建过程中发送个消息给窗体本身,模拟按钮消息,可以解决以上问题。

2.当窗体全屏并且假透明的时候,开始菜单栏最右边的关闭按钮得想办法除去。在csdn上找了下。找到一下两行代码:

::SHDoneButton(m_hWnd,SHDB_HIDE);   
   ModifyStyle(WS_CAPTION,WS_MINIMIZEBOX,SWP_NOSIZE);  

试验表明可以成功隐藏右上角的按钮。

----------以下文字 2008.10.7 补充-----------

    今天在一个MFC的dlg的工程里面测试上面的代码。发现下面的菜单栏老是去不掉。我代码中没有创建菜单栏或者工具条什么的!
仔细看了下CDialog的代码。发现了下的东西

//删除菜单栏,实际上那不是菜单栏,是个工具条 CControlBar*
m_pWndEmptyCB->DestroyWindow();
delete m_pWndEmptyCB;
m_pWndEmptyCB = NULL;

//隐藏输入法按钮,这个在程序退出以后记得还原回来。呵呵
CWnd* hWndTaskBar = FindWindow(TEXT("MS_SIPBUTTON"), NULL); 
hWndTaskBar->ShowWindow(SW_HIDE);

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16803921/viewspace-608867/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-21

  • 博文量
    26
  • 访问量
    87545