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

VC 通用控制項程式設計:CSliderCtrl 滑桿控制項完整指南

     編輯:關於VC++

滑桿控制項概述

滑桿控制項又稱軌道條,提供直觀的數值選擇介面,包含軌道、滑塊與刻度。廣泛用於音量控制、進度條、參數調整等場景。支援水平/垂直方向、單點/區間選擇、自動/無刻度等多種樣式。

常用樣式旗標

樣式說明
TBS_HORZ水平滑桿 (預設)
TBS_VERT垂直滑桿
TBS_TOP / TBS_LEFT刻度在上方/左側
TBS_BOTTOM / TBS_RIGHT刻度在下方/右側
TBS_BOTH兩側都有刻度
TBS_AUTOTICKS自動顯示刻度 (預設)
TBS_NOTICKS不顯示刻度
TBS_ENABLESELRANGE啟用選取範圍 (雙滑塊)
TBS_NOTHUMB隱藏滑塊

MFC 封裝類別 CSliderCtrl 核心操作

建立控制項

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,需強制轉型。

完整範例:對話框應用

1. 標頭檔宣告

// SlidDlg.h
class CSlidDlg : public CDialog {
    // ...
public:
    int m_nCur;  // 目前滑桿值
};

2. 初始化設定

// 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;
}

3. 訊息處理

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() 實現雙滑塊
  • ToolTip 整合:處理 TTN_NEEDTEXT 顯示當前數值
  • Owner Draw:繼承 CSliderCtrl 重載 OnPaint() 實現自訂外觀
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved