VC slider滑度条控件用法

时间:2023-01-30 17:44:15

本博客转载自http://www.xuebuyuan.com/1392205.html,对原作者表示感谢。


vc中滑动条(CSliderCtrl)是个常用的控件,用法如下:

主要要方法有:

1、设置、取得滑动范围:

 void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE ); 
void GetRange( int& nMin, int& nMax ) const;
 

2、设置、取得按下左右箭头滑动间隔:

 int SetLineSize( int nSize ); 
int GetLineSize( ) const;
 

3、设置、取得按下PgUp、PgDown时滑动间隔:

 int SetPageSize( int nSize ); 
int GetPageSize( ) const;
 

4、设置、取得滑块位置:

 void SetPos( int nPos ); 
int GetPos( ) const;
 

5、设置滑动条刻度的频度:

 void SetTicFreq( int nFreq );

实例:

在对话框中放一个Slider控件,添加相应的Ctrl型变量为m_slider。在对话框初始化函数OnInitDialog()中添加:

 BOOL CDlgSetup::OnInitDialog() 
{
 CDialog::OnInitDialog();
 
 // TODO: Add extra initialization here

 m_slider.SetRang(0,100);//设置滑动范围

 m_slider.SetTicFreq(10);//每10个单位画一刻度
 return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}
 

 Slider控件本身并没有响应滑动的消息函数,但可以通过主窗体的OnHScroll()响应。在类向导中为对话框添加WM_HSCROLL消息,在响应函数中添加:

 void CDlgSetup::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
 // TODO: Add your message handler code here and/or call default
 CSliderCtrl   *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
 m_int=pSlidCtrlHue->GetPos();//取得当前位置值  
  CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

//m_int 即为当前滑块的值。

 

 

关键的:滑度条的单击响应事件应该在窗体的CWnd::OnHScroll事件来处理

 

 

 

 

当用户单击窗口的水平滚动条记录时,框架调用该成员函数。

afx_msg void OnHScroll(
UINT nSBCode,
UINT nPos,
CScrollBar* pScrollBar
);
参数

nSBCode

指定指示用户滚动请求的滚动条代码。 此参数可以是下列值之一:

查看CWnd::OnHScroll函数,原形一样。

通知码查了一下:
TB_BOTTOM         用户按下了键盘的End键。
TB_ENDTRACK       在拖动滑块之后,用户释放了鼠标键。
TB_LINEDOWN       用户按下了键盘的向下或向右箭头。水平滑动条默认接受向右键。
TB_LINEUP         用户按下了键盘的向上或向左箭头。水平滑动条默认接受向左键。
TB_PAGEDOWN       用户单击了水平滑动条滑块的右边,或单击了竖直滑动条滑块的下边,或按下了键盘的PageDown键。
TB_PAGEUP         用户单击了水平滑动条滑块的左边,或单击了竖直滑动条滑块的上边,或按下了键盘的PageUp键。
TB_THUMBPOSITION  滑动条将绝对位置移动到由wParam的高位字(nPos)指定的地方。
TB_THUMBTRACK     用户正在拖动滑块。
TB_TOP            用户按下了键盘的Home键。

 

  • SB_LEFT 滚动到最左侧。

  • SB_ENDSCROLL 结束滚动。

  • SB_LINELEFT 滚动。

  • SB_LINERIGHT 滚动权限。

  • SB_PAGELEFT 滚动一页。

  • SB_PAGERIGHT 滚动一页权限。

  • SB_RIGHT 滚动到最右边。

  • 为绝对位置的SB_THUMBPOSITION 滚动。 当前位置由 nPos 参数指定。

  • SB_THUMBTRACK 拖动到指定位置的滚动框。 当前位置由 nPos 参数指定。

nPos

如果滚动条代码是 SB_THUMBPOSITION  SB_THUMBTRACK,指定滚动框位置;否则,未使用。 基于初始滚动大小,nPos 可以为负的,因此如果需要,转换到 int

pScrollBar

如果滚动消息来自滚动条控件,其中包含指向该控件。 如果用户单击窗口滚动条,此参数是 NULL 指针可能是瞬态的,不应存储以供将来使用。

备注

提供反馈的应用程序通常使用 SB_THUMBTRACK 滚动条代码,在滚动框拖动时。

如果应用程序移动滚动条控件的内容,它还必须重置滚动框的位置具有 SetScrollPos 成员函数。

VC slider滑度条控件用法说明

此成员函数由框架调用提供您的应用程序处理Windows消息。 当接收消息,参数传递给函数以反映结构接收的参数。 如果调用此函数的基类实现,该实现将使用参数最初用消息您提供给函数而非参数。

示例


void CMdiView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// Get the minimum and maximum scroll-bar positions.
int minpos;
int maxpos;
GetScrollRange(SB_HORZ, &minpos, &maxpos);
maxpos = GetScrollLimit(SB_HORZ);

// Get the current position of scroll box.
int curpos = GetScrollPos(SB_HORZ);

// Determine the new position of scroll box.
switch (nSBCode)
{
case SB_LEFT: // Scroll to far left.
curpos = minpos;
break;

case SB_RIGHT: // Scroll to far right.
curpos = maxpos;
break;

case SB_ENDSCROLL: // End scroll.
break;

case SB_LINELEFT: // Scroll left.
if (curpos > minpos)
curpos--;
break;

case SB_LINERIGHT: // Scroll right.
if (curpos < maxpos)
curpos++;
break;

case SB_PAGELEFT: // Scroll one page left.
{
// Get the page size.
SCROLLINFO info;
GetScrollInfo(SB_HORZ, &info, SIF_ALL);

if (curpos > minpos)
curpos = max(minpos, curpos - (int) info.nPage);
}
break;

case SB_PAGERIGHT: // Scroll one page right.
{
// Get the page size.
SCROLLINFO info;
GetScrollInfo(SB_HORZ, &info, SIF_ALL);

if (curpos < maxpos)
curpos = min(maxpos, curpos + (int) info.nPage);
}
break;

case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
curpos = nPos; // of the scroll box at the end of the drag operation.
break;

case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
curpos = nPos; // position that the scroll box has been dragged to.
break;
}

// Set the new position of the thumb (scroll box).
SetScrollPos(SB_HORZ, curpos);

CView::OnHScroll(nSBCode, nPos, pScrollBar);
}