首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC CStatusBar 面板風格模仿 WordPad:合併顯示與動態寬度

     編輯:程式設計疑難解答

需求:在 MFC 對話框中實現類似 WordPad 的狀態欄,多個面板合併為一行顯示,且隨窗口大小自適應調整寬度。

實現要點

  1. 創建狀態欄:繼承 CStatusBar,在 OnCreate 中調用 Create、SetIndicators 定義面板 ID。
  2. 設置面板風格:使用 SetPaneInfo(index, id, style, width),style 可組合 SBPS_NORMAL、SBPS_STRETCH(自動拉伸填充剩餘寬度)、SBPS_POPOUT(凹陷邊框)等。
  3. 響應窗口大小變化:在對話框 OnSize 消息處理中,獲取客戶區寬度,按比例或固定值調用 SetPaneInfo 更新各面板寬度,最後 Invalidate() 重繪。

關鍵代碼片段

void CMyDialog::OnSize(UINT nType, int cx, int cy) {
    CDialog::OnSize(nType, cx, cy);
    if (m_wndStatusBar.m_hWnd) {
        // 例:面板 0 固定 100px,面板 1 拉伸佔剩餘
        m_wndStatusBar.SetPaneInfo(0, ID_INDICATOR_PANE0, SBPS_NORMAL, 100);
        m_wndStatusBar.SetPaneInfo(1, ID_INDICATOR_PANE1, SBPS_STRETCH, 0);
        // 或者按比例分配
        // m_wndStatusBar.SetPaneInfo(0, ..., SBPS_NORMAL, cx / 3);
        // m_wndStatusBar.SetPaneInfo(1, ..., SBPS_NORMAL, cx * 2 / 3);
        m_wndStatusBar.Invalidate();
    }
}

參考資源

CSDN 博客《MFC StatusBar 面板風格設置》:https://blog.csdn.net/loongee/article/details/6113441

善用 SBPS_STRETCH 可讓最後一個面板自動填充剩餘空間,無需手動計算寬度。

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