六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

VC++的全屏顯示問題

[摘要]---- 全屏顯示是一些應用軟件程序必不可少的功能。比如在用VC++編輯工程源文件或編輯對話框等資源時,選擇菜單“ViewFull Screen”,即可進入全屏顯示狀態(tài),按“Esc”鍵后會退出全屏顯...
---- 全屏顯示是一些應用軟件程序必不可少的功能。比如在用VC++編輯工程源文件或編輯對話框等資源時,選擇菜單“ViewFull Screen”,即可進入全屏顯示狀態(tài),按“Esc”鍵后會退出全屏顯示狀態(tài)。
  在VC++6.0中我們用AppWizard按默認方式生成單文檔界面的應用程序框架。下面將先討論點擊菜單項“ViewFull Screen”實現(xiàn)全屏顯示的方法,再講述按“Esc”鍵后如何退出全屏顯示狀態(tài)。
  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設(shè)置為ID_FULL_SCREEN,Caption為“Full Screen”。還可以在工具欄中添加新的工具圖標,并使之與菜單項“Full Screen”相關(guān)聯(lián),即將其ID值也設(shè)置為ID_FULL_SCREEN。
  3)設(shè)計全屏顯示處理函數(shù),在CMainFrame類增加上述菜單項ID_FULL_SCREEN消息的響應函數(shù)。響應函數(shù)如下:
  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);
  // 將除控制條外的客戶區(qū)全屏顯示到從(0,0)到(nFullWidth, nFullHeight)區(qū)域, 將(0,0)和(nFullWidth, nFullHeight)兩個點外擴充原窗口和除控制條之外的 客戶區(qū)位置間的差值, 就得到全屏顯示的窗口位置
  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; // 設(shè)置全屏顯示標志為 TRUE
  // 進入全屏顯示狀態(tài)
  WINDOWPLACEMENT wndpl;
  wndpl.length=sizeof(WINDOWPLACEMENT);
  wndpl.flags=0;
  wndpl.showCmd=SW_SHOWNORMAL;
  wndpl.rcNormalPosition=m_FullScreenRect;
  SetWindowPlacement(&wndpl);}
  4)重載CMainFrame類的OnGetMinMaxInfo函數(shù),在全屏顯示時提供全屏顯示的位置信息。
  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) ;
  }完成上面的編程后,可以聯(lián)編執(zhí)行FullScreen.exe,選擇菜單“ViewFull Screen”或點擊與之關(guān)聯(lián)的工具欄按鈕即可進入全屏顯示狀態(tài)。但現(xiàn)在還需要增加用戶退出全屏顯示狀態(tài)的操作接口,下面講述如何編程實現(xiàn)按“Esc”鍵退出全屏顯示狀態(tài)。
  1)在ClassView中選中CMainFrame并單擊鼠標右鍵,選擇“Add Member Function...”,添加public類型的成員函數(shù)EndFullScreen,該函數(shù)將完成退出全屏顯示的操作。
  void CMainFrame::EndFullScreen()
  {if(m_bFullScreen)
  {// 退出全屏顯示, 恢復原窗口顯示
  ShowWindow(SW_HIDE);
  SetWindowPlacement(&m_OldWndPlace
ment);}}
  2)函數(shù)EndFullScreen可以退出全屏顯示狀態(tài),問題是如何在“Esc”鍵被按下之后調(diào)用執(zhí)行此函數(shù)。由于視圖類可以處理鍵盤輸入的有關(guān)消息(如WM_KEYDOWN表示用戶按下了某一個鍵),我們將在視圖類CFullScreenView中添加處理按鍵消息WM_KEYDOWN的響應函數(shù)OnKeyDown。判斷如果按的鍵為“Esc”鍵,則調(diào)用CMainFrame類的函數(shù)EndFullScreen,便可退出全屏顯示狀態(tài)。
  void CFullScreenView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  {if(nChar==VK_ESCAPE) // 如果按的鍵為Esc鍵
  {// 獲取主框架窗口的指針
  CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
  // 調(diào)用主窗口類的自定義函數(shù) EndFullScreen ,便可退出全屏顯示狀態(tài)
  pFrame->EndFullScreen();}
  CView::OnKeyDown(nChar, nRepCnt, nFlags);}
  這樣我們就實現(xiàn)了比較專業(yè)的全屏顯示的功能,相信肯定會令你設(shè)計的軟件程序增色不少。


主站蜘蛛池模板: 欧美亚洲精品在线 | 色呦呦免费观看 | 日本三区四区免费高清不卡 | 色噜噜狠狠狠狠色综合久一 | 亚洲精品另类 | 亚洲国产三级在线观看 | 我要看黄色一级毛片 | 欧美综合图区 | 日本草草视频在线观看 | 亚洲欧洲免费 | 小草社区在线观看播放 | 亚洲刺激视频 | 青娱乐福利| 欧美在线三级 | 午夜美女影院 | 一二三四免费高清观看在线观看 | 天天干天天插天天射 | 日本午夜小视频 | 伊人快播 | 日本成人激情视频 | 欧美特黄一免在线观看 | 天天射天天射天天射 | 日本中文字幕不卡 | 在线观看免费亚洲 | 欧洲三级在线观看 | 天天躁天天碰天天看 | 日韩毛片大全免费高清 | 欧美整片在线 | 日韩欧国产精品一区综合无码 | 视频二区 调教中字 知名国产 | 天天干天天在线 | 日本激情视频一区二区三区 | 色噜噜狠狠一区二区 | 孕妇三片高清在线观看 | 天天色天天射天天操 | 亚洲第九页 | 日韩黄色片视频 | 亚洲精品色 | 午夜国产| 午夜视频在线看 | 亚洲视频在线播放 |