天天看點

VC++實作程式全屏顯示

全屏顯示在許多應用程式中都得到了應用。實作此功能的原理很簡單: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加入右鍵等善後處理,不再介紹。

這樣一個具有全屏顯示的應用程式就誕生了。

繼續閱讀