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

MFC CStatusBar 動態調整面板寬度:OnSize 中調用 SetPaneInfo

     編輯:程式設計疑難解答

需求:對話框大小改變時,狀態欄各面板寬度自適應調整(如均分或按比例)。

實現步驟

  1. 在對話框類中添加 CStatusBar m_wndStatusBar 成員。
  2. OnInitDialog 中創建並設置指示器:
    m_wndStatusBar.Create(this); m_wndStatusBar.SetIndicators(indicators, count);
  3. 在 OnSize 消息處理中計算寬度並調用 SetPaneInfo:
void CMyDialog::OnSize(UINT nType, int cx, int cy) {
    CDialog::OnSize(nType, cx, cy);
    if (m_wndStatusBar.GetSafeHwnd()) {
        CRect rect;
        m_wndStatusBar.GetWindowRect(&rect);
        ScreenToClient(&rect);
        int paneCount = 3; // 面板數
        int paneWidth = rect.Width() / paneCount;
        for (int i = 0; i < paneCount; ++i) {
            UINT id = m_wndStatusBar.GetItemID(i);
            // 最後一個面板用 SBPS_STRETCH 自動填充剩餘
            if (i == paneCount - 1)
                m_wndStatusBar.SetPaneInfo(i, id, SBPS_STRETCH, 0);
            else
                m_wndStatusBar.SetPaneInfo(i, id, SBPS_NORMAL, paneWidth);
        }
        m_wndStatusBar.Invalidate();
    }
}

關鍵 API

  • SetPaneInfo(index, id, style, width):style 可為 SBPS_NORMAL(固定寬度)、SBPS_STRETCH(拉伸佔滿剩餘)、SBPS_POPOUT(凹陷邊框)。
  • SBPS_STRETCH 配合 width=0 讓最後一面板自動適應,無需手動計算餘寬。

參考資源

百度百科 MFC StatusBar 面板設置:https://baike.baidu.com/link?url=_ZZZCUxppVRm7zfGER8DM-RrTGru0s2KBw1rPRhbBCZQOYytK9B1qCIESlPDDAB9aYdNC30eVHjCiA0IL6dMzK

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