一種簡單實用的全屏方法

實現程序全屏幕顯示的思路有很多種,最常見的一種就是:

  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);
 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章