滑桿控制項又稱軌道條,提供直觀的數值選擇介面,包含軌道、滑塊與刻度。廣泛用於音量控制、進度條、參數調整等場景。支援水平/垂直方向、單點/區間選擇、自動/無刻度等多種樣式。
| 樣式 | 說明 |
|---|---|
| TBS_HORZ | 水平滑桿 (預設) |
| TBS_VERT | 垂直滑桿 |
| TBS_TOP / TBS_LEFT | 刻度在上方/左側 |
| TBS_BOTTOM / TBS_RIGHT | 刻度在下方/右側 |
| TBS_BOTH | 兩側都有刻度 |
| TBS_AUTOTICKS | 自動顯示刻度 (預設) |
| TBS_NOTICKS | 不顯示刻度 |
| TBS_ENABLESELRANGE | 啟用選取範圍 (雙滑塊) |
| TBS_NOTHUMB | 隱藏滑塊 |
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
dwStyle:組合上述樣式旗標rect:控制項位置與大小pParentWnd:父視窗指標nID:控制項 ID| 功能 | 取得 | 設定 |
|---|---|---|
| 範圍 | GetRangeMin()/GetRangeMax()/GetRange() | SetRangeMin()/SetRangeMax()/SetRange() |
| 當前位置 | GetPos() | SetPos() |
| 選取範圍 | GetSelection() | SetSelection() |
| 行/頁大小 | GetLineSize()/GetPageSize() | SetLineSize()/SetPageSize() |
| 刻度操作 | - | SetTic()/ClearTics() |
ClearSel():清除選取範圍VerifyPos():驗證位置是否在範圍內使用者操作滑桿時,控制項向父視窗發送 WM_HSCROLL (水平) 或 WM_VSCROLL (垂直) 訊息。需在父視窗類別中重載 OnHScroll():
void CMyDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {
CSliderCtrl* pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER);
int nCurPos = pSlider->GetPos();
// 根據 nSBCode (TB_THUMBTRACK, TB_ENDTRACK 等) 處理即時/最終值
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
注意:參數 pScrollBar 實際指向 CSliderCtrl,需強制轉型。
// SlidDlg.h
class CSlidDlg : public CDialog {
// ...
public:
int m_nCur; // 目前滑桿值
};
// SlidDlg.cpp
BOOL CSlidDlg::OnInitDialog() {
CDialog::OnInitDialog();
CSliderCtrl* pSlidCtrl = (CSliderCtrl*)GetDlgItem(IDC_SLIDER);
pSlidCtrl->SetRange(1, 5, TRUE); // 範圍 1~5,TRUE 重繪
pSlidCtrl->SetPos(2); // 初始位置
return TRUE;
}
void CSlidDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
CSliderCtrl* pSlidCtrl = (CSliderCtrl*)GetDlgItem(IDC_SLIDER);
m_nCur = pSlidCtrl->GetPos();
// 可在此更新 UI 顯示、即時預覽等
}
SetTic() 在特定位置添加刻度TBS_ENABLESELRANGE 配合 SetSelection() 實現雙滑塊TTN_NEEDTEXT 顯示當前數值CSliderCtrl 重載 OnPaint() 實現自訂外觀