程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在VC中實現全屏窗口程序

在VC中實現全屏窗口程序

編輯:vc教程

  全屏顯示是一些應用軟件程序必不可少的功能。比如在用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) ;
  }

  1)在ClassVIEw中選中CMainFrame並單擊鼠標右鍵,選擇“Add Member Function…”,添加public類型的成員函數EndFullScreen,該函數將完成退出全屏顯示的操作。
Void CMainFrame::EndFullScreen()
  {if(m_bFullScreen)
  {// 退出全屏顯示, 恢復原窗口顯示
  ShowWindow(SW_HIDE);
  SetWindowPlacement(&m_OldWndPlace
ment);}}

  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);}
  這樣我們就實現了比較專業的全屏顯示的功能,相信肯定會令你設計的軟件程序增色不少。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved