首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC++

MFC 應用程式實作全螢幕顯示功能完整指南

     編輯:VC++

核心設計思路

在 CMainFrame 中新增成員變數追蹤狀態,並處理選單命令、視窗尺寸限制與 UI 更新:

  • m_bFullScreen:全螢幕狀態旗標
  • m_FullScreenWindowRect:全螢幕視窗矩形
  • m_wpPrev:保存正常模式視窗佈局(WINDOWPLACEMENT)
  • m_wndFullScreenBar:全螢幕專用浮動工具列

核心實作:OnMenuFullscreen

void CMainFrame::OnMenuFullscreen() {
    RECT rectDesktop;
    WINDOWPLACEMENT wpNew;

    if (m_bFullScreen) {          // 進入全螢幕
        m_wndStatusBar.ShowWindow(SW_HIDE);
        m_wndToolBar.ShowWindow(SW_HIDE);
        GetWindowPlacement(&m_wpPrev);
        m_wpPrev.length = sizeof(m_wpPrev);

        ::GetWindowRect(::GetDesktopWindow(), &rectDesktop);
        ::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE, GetExStyle());
        m_FullScreenWindowRect = rectDesktop;

        wpNew = m_wpPrev;
        wpNew.showCmd = SW_SHOWNORMAL;
        wpNew.rcNormalPosition = rectDesktop;

        m_wndFullScreenBar = new CToolBar;
        if (!m_wndFullScreenBar->Create(this, CBRS_SIZE_DYNAMIC|CBRS_FLOATING)
            || !m_wndFullScreenBar->LoadToolBar(IDR_FULLSCREEN)) {
            TRACE0("Failed to create toolbar\n");
            return;
        }
        m_wndFullScreenBar->EnableDocking(FALSE);
        m_wndFullScreenBar->SetWindowPos(0, 100, 100, 0, 0,
            SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW);
        m_wndFullScreenBar->SetWindowText(_T("全螢幕顯示"));
        FloatControlBar(m_wndFullScreenBar, CPoint(100,100));
        m_bFullScreen = TRUE;
    }
    else {                        // 恢復正常模式
        m_wndFullScreenBar->DestroyWindow();
        delete m_wndFullScreenBar;
        m_bFullScreen = FALSE;
        m_wndStatusBar.ShowWindow(SW_SHOWNORMAL);
        m_wndToolBar.ShowWindow(SW_SHOWNORMAL);
        wpNew = m_wpPrev;
    }
    SetWindowPlacement(&wpNew);
}

支援函數

尺寸限制:OnGetMinMaxInfo

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI) {
    if (m_bFullScreen) {
        lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
        lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
        lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
        lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
    }
}

選單狀態更新:OnUpdateMenuFullscreen

void CMainFrame::OnUpdateMenuFullscreen(CCmdUI* pCmdUI) {
    pCmdUI->Enable();
    pCmdUI->SetCheck(m_bFullScreen);
}

關鍵技術點解析

  1. 視窗佈局保存/恢復:GetWindowPlacement/SetWindowPlacement 完整保存位置、大小、最大化/最小化狀態,切換無縫。
  2. 桌面座標修正:AdjustWindowRectEx 依視窗風格調整矩形,確保客戶區精確覆蓋全螢幕。
  3. 浮動工具列:CBRS_FLOATING + EnableDocking(FALSE) 禁止停靠,FloatControlBar 定位。
  4. 資源清理:退出時必須 DestroyWindow 再 delete,避免資源洩漏。

擴充建議

  • 支援多螢幕:使用 MonitorFromWindow + GetMonitorInfo 取得當前螢幕工作區。
  • 鍵盤快捷鍵切換:在 PreTranslateMessage 攔截 F11 呼叫此函數。
  • 動畫過渡:搭配 AnimateWindow 增加切換視覺效果。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved