需求:在 MFC 對話框中實現類似 WordPad 的狀態欄,多個面板合併為一行顯示,且隨窗口大小自適應調整寬度。
CStatusBar,在 OnCreate 中調用 Create、SetIndicators 定義面板 ID。SetPaneInfo(index, id, style, width),style 可組合 SBPS_NORMAL、SBPS_STRETCH(自動拉伸填充剩餘寬度)、SBPS_POPOUT(凹陷邊框)等。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 可讓最後一個面板自動填充剩餘空間,無需手動計算寬度。