http://www.devdiv.net/redirect.php?tid=10734&goto=lastpost
關於Mobile的全屏實現的一點心得
在做了幾個項目之後,終於找到了一個比較好的實現全屏的方法,之前做全屏的時候,在網上找了很多的實現方法,總結了下大致就2種(其他的大同小異): 1、 SetForegroundWindow(); SHFullScreen(m_hWnd, SHFS_HIDESIPBUTTON); SHFullScreen(m_hWnd, SHFS_HIDETASKBAR); SHFullScreen(m_hWnd, SHFS_HIDESTARTICON); 2、 CWnd* pWndSIP = FindWindow( _T("menu_worker"), 0 ); if ( pWndSIP ) { pWndSIP->SetWindowPos(&wndBottom , 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); pWndSIP->ShowWindow(SW_HIDE); } pWndSIP = FindWindow( _T("MS_SIPBUTTON"), 0 ); if ( pWndSIP ) { pWndSIP->SetWindowPos(&wndBottom , 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); pWndSIP->ShowWindow(SW_HIDE); } pWndSIP = FindWindow( _T("HHTaskBar"), 0 ); if ( pWndSIP ) { pWndSIP->SetWindowPos(&wndBottom , 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE); pWndSIP->ShowWindow(SW_HIDE); } 這2種方法其實都可以實現窗口的全屏,但是在某些時候或者某些機器上,並不能成功,或者是開始是成功的,但是在某種情況下就跑出來了,而且之後一直就因此不了了,具體的原因我跟了下,因爲Mobile自己帶了很多系統的功能條,而且類名都是一樣的,所以當時隱藏的可能只是其中的一個,並沒有全部隱藏,當某些情況觸發的時候就會將另外一個系統條彈出來,而且很難隱藏。 我找到的方法是,在程序啓動的時候,或者是你需要隱藏的時候調用系統的EnumWindows函數去枚舉所有的系統窗口,然後用GetClassName(hwnd,szClassName,256);函數去根據窗口的名字去獲取這個窗口的類名,然後根據你需要隱藏的類名去隱藏窗口,例如: if (!wcscmp(szClassName,L"HHTaskBar")) { ShowWindow(hwnd, SW_HIDE); //return FALSE; } if (!wcscmp(szClassName,L"menu_worker")) { //EnableWindow(hwnd, FALSE); ShowWindow(hwnd, SW_HIDE); //return FALSE; } if (!wcscmp(szClassName,L"MS_SIPBUTTON")) { //EnableWindow(hwnd, FALSE); ShowWindow(hwnd, SW_HIDE); //return FALSE; } 這樣就可以保證所有的系統條都被隱藏了。 當然還有一點很重要,這樣的函數執行了以後,一定要在你退出你的程序的時候寫個逆隱藏函數,將之前隱藏的都顯示出來(只需要將ShowWindow(hwnd, SW_HIDE);改爲ShowWindow(hwnd, SW_SHOW);),否則,退出你的程序之後可是什麼都看不到了哦 MS_SIPBUTTON:下方中間的拼字那個窗口 menu_worker:下方的帶顏色的長條,不算中間的拼字 HHTaskBar:上方的任務條 |