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

MFC 應用程式標題列動態顯示/隱藏技術

     編輯:關於VC++

為了獲得更大顯示區域或特殊 UI 需求,有時需要動態隱藏或顯示視窗標題列。本文說明在 MFC 架構下的實作方法,亦適用於一般 Windows API 開發。

核心方法:ModifyStyle / Windows API

CWnd::ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0) 可動態增減視窗樣式。WS_CAPTION 控制標題列顯示。

MFC 實作範例 (MDI 應用程式)

1. 選單項目與成員變數

  • 選單 ID:ID_VIEW_TITLE_BAR
  • CMainFrame 成員:BOOL m_bViewTitleBar,建構子初始化為 TRUE

2. 使用 ModifyStyle 實作


void CMainFrame::OnViewTitleBar() {
    m_bViewTitleBar = !m_bViewTitleBar;
    if (!m_bViewTitleBar) {  // 隱藏
        ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
    } else {                 // 顯示
        ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);
    }
}

void CMainFrame::OnUpdateViewTitleBar(CCmdUI* pCmdUI) {
    pCmdUI->SetCheck(m_bViewTitleBar);
}

3. 直接使用 Windows API 實作(等效)


void CMainFrame::OnViewTitleBar() {
    m_bViewTitleBar = !m_bViewTitleBar;
    LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
    if (!m_bViewTitleBar) {  // 隱藏
        ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle & ~WS_CAPTION);
    } else {                 // 顯示
        ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle | WS_CAPTION);
    }
    // 重繪視窗框架
    ::SetWindowPos(m_hWnd, NULL, 0, 0, 0, 0,
        SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
}

關鍵點說明

  • SWP_FRAMECHANGED 強制 WM_NCCALCSIZE 重算非客戶區,使標題列變更即時生效。
  • ModifyStyle 內部實際呼叫上述三個 API:GetWindowLong、SetWindowLong、SetWindowPos。
  • 測試環境:Win2000 SP3 + VC6.0 通過。

適用場景

全螢幕模式、簡報模式、自訂標題列、最大化顯示區域等需動態切換標題列的場合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved