在VC++6.0開發中實現全螢幕顯示

來源:互聯網
上載者:User

在VC++6.0開發中實現全螢幕顯示

  全螢幕顯示是一些應用軟體程式必不可少的功能。比如在用VC++編輯工程源檔案或編輯對話方塊等資源時,選擇菜單“View/Full Screen”,即可進入全螢幕顯示狀態,按“Esc”鍵後會退出全螢幕顯示狀態。
  在VC++6.0中我們用AppWizard按預設產生單一文件介面的應用程式架構。下面將先討論點擊功能表項目“View/Full 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,選擇菜單“View/Full Screen”或點擊與之關聯的工具列按鈕即可進入全螢幕顯示狀態。但現在還需要增加使用者退出全螢幕顯示狀態的操作介面,下面講述如何編程實現按“Esc”鍵退出全螢幕顯示狀態。
  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);}
  這樣我們就實現了比較專業的全螢幕顯示的功能,相信肯定會令你設計的軟體程式增色不少。
(廣東 粟利民 孫強)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.