以下是转帖,未经过验证,请谨慎对待
在做了几个项目之后,终于找到了一个比较好的实现全屏的方法,之前做全屏的时候,在网上找了很多的实现方法,总结了下大致就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:上方的任务条 |