當前位置:編程學習大全網 - 源碼下載 - 用MFC怎麽創建壹個全屏窗口

用MFC怎麽創建壹個全屏窗口

全屏顯示是壹些應用軟件程序必不可少的功能。比如在用VC++編輯工程源文件或編輯對話框等資源時,選擇菜單“ViewFull Screen”,即可進入全屏顯示狀態,按“Esc”鍵後會退出全屏顯示狀態。

在VC++6.0中我們用AppWizard按默認方式生成單文檔界面的應用程序框架。下面將先討論點擊菜單項“ViewFull Screen”實現全屏顯示的方法,再講述按“Esc”鍵後如何退出全屏顯示狀態。

1) 在CMainFrame類中,增加如下三個成員變量。

Class CMainFrame : public CFrameWnd

{ private: //自己添加的三個成員變量

WINDOWPLACEMENT m_OldWndPlacement; //用來保存原窗口位置

BOOL m_bFullScreen; //全屏顯示標誌

Crect m_FullScreenRect; //表示全屏顯示時的窗口位置

protected: CMainFrame();

DECLARE_DYNCREATE(CMainFrame)}

2)在資源編輯器中編輯菜單IDR_MAINFRAME。在“View”菜單欄下添加菜單項“Full Screen”。在其屬性框中,ID設置為ID_FULL_SCREEN,Caption為“Full Screen”。還可以在工具欄中添加新的工具圖標,並使之與菜單項“Full Screen”相關聯,即將其ID值也設置為ID_FULL_SCREEN。

3)設計全屏顯示處理函數,在CMainFrame類增加上述菜單項ID_FULL_SCREEN消息的響應函數。響應函數如下:

void CMainFrame::OnFullScreen()

{ GetWindowPlacement(&m_OldWndPlacement);

Crect WindowRect;

GetWindowRect(&WindowRect);

Crect ClientRect;

RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);

ClientToScreen(&ClientRect);

// 獲取屏幕的分辨率

int nFullWidth=GetSystemMetrics(SM_CXSCREEN);

int nFullHeight=GetSystemMetrics(SM_CYSCREEN);

//將除控制條外的客戶區全屏顯示到從(0,0)到(nFullWidth, nFullHeight)區域, //將(0,0)和(nFullWidth, nFullHeight)兩個點外擴充原窗口和除控制條之外的 客戶區位置間的差值, 就得到全屏顯示的窗口位置

m_FullScreenRect.left = WindowRect.left-ClientRect.left;

m_FullScreenRect.top = WindowRect.top-ClientRect.top;

m_FullScreenRect.right = WindowRect.right-ClientRect.right+nFullWidth;

m_FullScreenRect.bottom = WindowRect.bottom-ClientRect.bottom+nFullHeight;

m_bFullScreen = TRUE; // 設置全屏顯示標誌為 TRUE

// 進入全屏顯示狀態

WINDOWPLACEMENT wndpl;

wndpl.length=sizeof(WINDOWPLACEMENT);

wndpl.flags=0;

wndpl.showCmd=SW_SHOWNORMAL;

wndpl.rcNormalPosition=m_FullScreenRect;

SetWindowPlacement(&wndpl);}

4)重載CMainFrame類的OnGetMinMaxInfo函數,在全屏顯示時提供全屏顯示的位置信息。

Void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)

{ if(m_bFullScreen)

{ lpMMI->ptMaxSize.x=m_FullScreenRect.Width();

lpMMI->ptMaxSize.y=m_FullScreenRect.Height();

lpMMI->ptMaxPosition.x=m_FullScreenRect.Width();

lpMMI->ptMaxPosition.y=m_FullScreenRect.Height();

// 最大的Track尺寸也要改變

lpMMI->ptMaxTrackSize.x=m_FullScreenRect.Width();

lpMMI->ptMaxTrackSize.y=m_FullScreenRect.Height();

} CFrameWnd::OnGetMinMaxInfo(lpMMI) ;

}完成上面的編程後,可以聯編執行FullScreen.exe,選擇菜單“ViewFull Screen”或點擊與之關聯的工具欄按鈕即可進入全屏顯示狀態。但現在還需要增加用戶退出全屏顯示狀態的操作接口,下面講述如何編程實現按“Esc”鍵退出全屏顯示狀態。

1)在ClassView中選中CMainFrame並單擊鼠標右鍵,選擇“Add Member Function…”,添加public類型的成員函數EndFullScreen,該函數將完成退出全屏顯示的操作。

Void CMainFrame::EndFullScreen()

{ if(m_bFullScreen)

{ //退出全屏顯示, 恢復原窗口顯示

ShowWindow(SW_HIDE);

SetWindowPlacement(&m_OldWndPlacement); }}

2)函數EndFullScreen可以退出全屏顯示狀態,問題是如何在“Esc”鍵被按下之後調用執行此函數。由於視圖類可以處理鍵盤輸入的有關消息(如WM_KEYDOWN表示用戶按下了某壹個鍵),我們將在視圖類CFullScreenView中添加處理按鍵消息WM_KEYDOWN的響應函數OnKeyDown。判斷如果按的鍵為“Esc”鍵,則調用CMainFrame類的函數EndFullScreen,便可退出全屏顯示狀態。

Void CFullScreenView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{ if(nChar==VK_ESCAPE) // 如果按的鍵為Esc鍵

{// 獲取主框架窗口的指針

CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;

// 調用主窗口類的自定義函數 EndFullScreen ,便可退出全屏顯示狀態

pFrame->EndFullScreen();}

Cview::OnKeyDown(nChar, nRepCnt, nFlags);}

這樣我們就實現了比較專業的全屏顯示的功能,相信肯定會令妳設計的軟件程序增色不少。

  • 上一篇:有沒有微信小程序調用百度ai車輛識別接口的程序源碼,很簡單的就可以?
  • 下一篇:豫u的車牌號在哪裏
  • copyright 2024編程學習大全網