全屏顯示在許多應用程式中都得到了應用。實作此功能的原理很簡單:CWnd類中MoveWindow()函數可以按照指定參數來顯示視窗。在執行視窗最大化以前利用GetWindowPlacement()函數先把視窗的目前位置儲存在一個變量中,執行視窗最大化後可以通過SetWindowPlacement()函數調用此變量來恢複視窗。利用RepositionBars()函數取得應用程式客戶區不被工具條掩蓋的大小,GetWindowRect()函數取得應用程式視窗的大小,根據兩者之間的關系和螢幕分辨率的尺寸來确定MoveWindow()函數的參數以達到螢幕最大化。
實作步驟如下:
(1) 利用VC6.0的AppWizard建立一個應用程式。
建立一個單文檔SDI應用程式,項目名為FullScreen。
(2) 利用資源編輯器在主菜單中增加一個菜單項。
在“編輯(E)”菜單下添加一個名為“全屏”的菜單,ID号為IDM_FULLSCREEN。
(3) 利用ClassWizard為新菜單項添加對應的消息映射函數。
進入ClassWizard,選擇Message Maps頁籤,在class name下拉清單框中選擇CMainFrame,在Object Ids清單框中選擇IDM_FULLSCREEN,在message清單框中輕按兩下COMMAND,單擊OK按鈕。
(4) 在CMainFrame類中增加以下變量:
WINDOWPLACEMENT prePlacement;
CRect m_FSRect;
BOOL m_bFullScreen;
(5) 在消息映射函數中添加如下代碼:
void CMainFrame::OnFullscreen()
{
// TODO: Add your command handler code here
GetWindowPlacement(&prePlacement);
CRect m_RectOfCurrentWindow,m_RectOfClient;
GetWindowRect(&m_RectOfCurrentWindow);
RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&m_RectOfClient);
ClientToScreen(&m_RectOfClient);
int nFullWidth = GetSystemMetrics(SM_CXSCREEN);
int nFullHeight = GetSystemMetrics(SM_CYSCREEN);
m_FSRect.left = m_RectOfCurrentWindow.left-m_RectOfClient.left;
m_FSRect.top = m_RectOfCurrentWindow.top - m_RectOfClient.top;
m_FSRect.right = m_RectOfCurrentWindow.right - m_RectOfClient.right+nFullWidth;
m_FSRect.bottom = m_RectOfCurrentWindow.bottom - m_RectOfClient.bottom + nFullHeight;
m_bFullScreen = TRUE;
MoveWindow(&m_FSRect,TRUE);
}
(6) 對CMainFrame類進行Add Windows Message Handler操作,彈出消息選擇對話框,對WM_GETMINMAXINFO消息添加消息響應函數。其實作代碼如下:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
// TODO: Add your message handler code here and/or call default
lpMMI->ptMaxTrackSize.x = 2*GetSystemMetrics(SM_CXSCREEN);
lpMMI->ptMaxTrackSize.y = 2*GetSystemMetrics(SM_CYSCREEN);
CFrameWnd::OnGetMinMaxInfo(lpMMI);
(7) 通過Project->Add To Project->Components And Controls菜單利用Gallery加入右鍵等善後處理,不再介紹。
這樣一個具有全屏顯示的應用程式就誕生了。