實現程序全屏幕顯示的思路有很多種,最常見的一種就是:
1)利用Windows API提供的一個結構體WINDOWPLACEMENT來存儲全屏顯示前視圖和主框架窗口在屏幕上的位置和顯示信息、非客戶區窗口的顯隱信息,以便全屏幕顯示時恢復窗口原狀;
2)通過API函數GetDesktopWindow()得到桌面窗口,由GetWindowRect()得到顯示器的尺寸;
3)通過AdjustWindowRect()來計算當客戶區大小爲屏幕大小時相應的窗口大小;
4)通過SetWindowPlacement()來設置視圖窗口和主窗口爲客戶區大小和屏幕大小的窗口;
5)處理窗口消息WM_GETMINMAXINFO,使窗口能夠順利的最大、最小化。
但是用這種方法並沒有實現真正的全屏,好像VC6的全屏也是這樣做的。如果有多屏顯卡,這樣實現的全屏是可以
從別的屏幕對其進行放大縮小的。
下面介紹一種簡單實用的實現全屏的方法。
m_bFullScreen=!m_bFullScreen; // 設置全屏顯示標誌
//一種更好的全屏顯示
LONG style = ::GetWindowLong(this->m_hWnd,GWL_STYLE);
if(m_bFullScreen)//全屏顯示
{
style &= ~(WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(this->m_hWnd,GWL_STYLE, style);
this->ShowWindow(SW_SHOWMAXIMIZED);
CRect rect;
this->GetWindowRect(&rect);
::SetWindowPos(this->m_hWnd,HWND_NOTOPMOST,rect.left-1, rect.top-1, rect.right-rect.left + 3, rect.bottom-rect.top + 3, SWP_FRAMECHANGED);
}
else
{
style |= WS_DLGFRAME | WS_THICKFRAME;
SetWindowLong(this->m_hWnd, GWL_STYLE, style);
this->ShowWindow(SW_NORMAL);
}