CSliderCtrl的使用

CSliderCtrl類的成員函數,可以對軌道條進行查詢和設置:

用GetRange和SetRange來查詢和設置軌道條的範圍,缺省的範圍是0-100.函數的聲明爲
void GetRange( int& nMin, int& nMax ) const;
void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE );
參數nMin和nMax分別是最小和最大值,參數bRedraw爲TRUE時將重繪控件.

用GetPos和SetPos來查詢和設置軌道條的當前值.函數的聲明爲
int GetPos( ) const;
void SetPos( int nPos );

用GetLineSize和SetLineSize來查詢和設置在按一下左箭頭鍵或右箭頭鍵時滑尺的移動量,該移動量的缺省值是1個單位.函數的聲明爲
int GetLineSize( ) const;
int SetLineSize( int nSize );

用GetPageSize和SetPageSize來查詢和設置滑尺的塊移動量,塊移動量是指當按下PgUp或PgDown鍵時滑尺的移動量.函數的聲明爲
int GetPageSize( ) const;
int SetPageSize( int nSize );

用SetTicFreq設置軌道條的刻度的頻度.缺省的頻度是每個單位都有一個刻度,在範圍較大時,爲了使刻度不至於過密,需要調用該函數設置一個合理的頻度.函數的聲明爲
void SetTicFreq( int nFreq );
參數nFreq說明了兩個刻度之間的間隔.

用函數SetTic來在指定位置設置刻度.Windows自動顯示的刻度是均勻的,利用該函數可以人爲設置不均勻的刻度,該函數的聲明爲
BOOL SetTic( int nTic );

用函數ClearTics來清除所有的刻度.該函數的聲明爲
void ClearTics( BOOL bRedraw = FALSE );

 

二、         CSliderCtrl使用說明

 

滑動條控制(Slider Control)也叫軌道條控制,其主要是用一個帶有軌道和滑標的小窗口以及窗口上的刻度,來讓用戶選擇一個離散數據或一個連續的數值區間。通過鼠標或鍵盤來進行數據的選擇操作,這在WIN98/95中的很多應用程序中都可以看到,如控制面板中的鼠標等,滑動條既可以是水平方式的也可以是垂直方式的。滑動條控制的風格如下:

TBS_HORZ 滑動條是水平方向的

TBS_VERT 滑動條是垂直方向的

TBS_LEFT 滑動條位於窗口左側

TBS_RIGHT 滑動條位於窗口右側

TBS_TOP 滑動條位於窗口頂部

TBS_BOTTOM 滑動條位於窗口底部

TBS_BOTH 滑動條位於窗口兩側

TBS_AUTOTICKS滑動條具有刻度,默認

TBS_NOTICKS 滑動條不具有刻度

滑動條的刻度條在每一個數值位置顯示一個刻度標記,如果在滑動條上顯示某一數值選擇區間,則應使用風格TBS_ENABLESELRANGE,此時選擇區間兩個不再是刻度標記,而是一個小的三角形符號。另外,使用風格TBS_NOTHUMB會使滑標消隱起來。

滑動條控制在MFC類庫中被封裝爲CSliderCtrl控制,其主要操作是設置刻度範圍、繪製刻度標記、設置選擇範圍和當前滑標位置等。當用戶進行交互操作時,滑動條控制將向其父窗口發送消息WM_HSCROLL,所以在應用程序中應重載父窗口的OnHScroll()成員函數,以便對消息進行正確處理系統發送的通知代碼、滑標位置和指向CSliderCtrl對象的指針等。由於考慮到和水平捲動杆公用同一個成員函數,OnHScroll()函數參數表中的指針變量被定義爲CScrollBar*類型,由於實際上消息是由滑動條產生的,所以在程序中必須把這個指針變量強制轉換爲CSliderCtrl*類型。滑動條和捲動杆的消息代碼和含義都非常類似如TB_BOTTOM等,所以這種處理方法比較合理。SetRange()函數用來設置範圍,SetPos()函數用來設置當前位置。

(二)滑動條控制的對象結構

滑動條控制的建立方法

CsliderCtrl &SliderCtrl 建立滑動條控制對象結構

Create 建立滑動條控制對象並綁定對象

滑動條控制類CSliderCtrl::Create的調用格式如下:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

其中參數dwStyle用來確定滑動條控制風格;參數rect用來確定滑動條控制的大小和位置;參數pParentWnd用來確定滑動條控制的父窗口指針;參數nID用來確定滑動條控制的控制符ID值。

2、滑動條控制的類屬性

滑動條控制對象的類屬性包括取得滑動條大小GetLineSize、設置滑動條大小SetLineSize、取得滑動條頁大小 GetPageSize、設置滑動條頁大小SetPageSize、取得滑動條最大位置GetRangeMax、取得滑動條最小位置 GetRangeMin、取得滑動條範圍GetRange、設置滑塊最小位置SetRangeMin、設置滑塊最大位置SetRangeMax、設置滑動條範圍SetRange、取得滑塊當前位置GetSelection、設置滑塊當前位置SetSelection、取得滑動條當前位置GetPos和設置滑動條當前位置SetPos等。

3、滑動條控制的操作方法

滑動條控制的操作方法包括清除滑動條當前選擇ClearSel、驗證滑動條當前位置是否在最大最小位置之間VerifyPos和清除當前刻度標誌ClearTics。

滑動條控制的應用技巧示例

1、利用應用程序嚮導AppWizard生成基於對象框的應用程序CSlidDlg;

2、在對話框中設置滑動條控制,其ID爲IDC_SLIDER;

3、在對話框初始代碼中增加控制的範圍和位置:

(1)在SlidDlg.h中設置數據成員,用來表示滑動條的當前值:

//SlidDlg.h
class CSlidDlg:public Cdialog
{ ......//其它代碼
public:
int m_nCur;
......//其它代碼
}

(2)在SlidDlg.cpp中設置初始狀態
BOOL CSlidDlg::OnInitDialog()
{ Cdialog::OnInitDialog();
.....//其它代碼
//TODO:Add extra initialization here
CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLLIDER);
pSlidCtrl->SetRange(1,5,TRUE);//設置滑動條範圍
pSlidCtrl->SetPos(2);//設置滑動條位置
......//其它代碼
return TRUE;
}

(3)完善滑動條的消息處理,利用類嚮導ClassWizard增加對話框窗口的WM_HSCROLL消息處理函數,並取得滑標所指位置值:

void CSlidDlg::OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)
{ //TODO:Add your message handler?
Cdialog::OnHScroll(nSBCode,nPos,pScrollBar);
CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLLIDER);
m_nCur=pSlidCtrl->GetPos();//取得當前位置值
}

 

當一個窗體中存在多個滑動條CSliderCtrl時,處理OnHScroll()響應時,完全可以不用指針來判斷當前是哪個滑動條在起作用。閒話少說,上代碼:
    int x;
    CString str;
    // 獲得子窗口ID,然後再分流處理
    switch(pScrollBar->GetDlgCtrlID())
    {
    case IDC_SLH_LENGTH:
        x = slhLength.GetPos();
        str.Format("Length : %d", x);
        stcLength.SetWindowText(str);
        break;
    case IDC_SLH_WIDTH:
        x = slhWidth.GetPos();
        str.Format("Width : %d", x);
        stcWidth.SetWindowText(str);
        break;
    default:
        break;
    }



本文轉至:http://www.cppblog.com/milo/articles/66710.html

發佈了18 篇原創文章 · 獲贊 7 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章