VC++中轻松实现滑动控件

来源:互联网 发布:哪些淘宝店有福利看 编辑:程序博客网 时间:2024/04/28 00:56

VC++中轻松实现滑动控件

今天在单位工作刚开始是操作CSlider控件,该控件的详细文档如下:

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 );

以上这些其实查查MSDN就可以知道了,没有什么困难的。我这里就针对Slider的三个消息事件简单解释下(仅凭我的理解):

NM_CUSTOMDRAW,是子控件通知其父控件它已经完成重画功能,对Slider来说也就是我们每次鼠标按住滑块移动一下就能使滑块向拥有该滑块的Slider产生一个NM_CUSTOMDRAW消息,以便用户实时获得移动滑块时的是实时值。

NM_RELEASEDCAPTURE,是子控件被鼠标按住拖动到适当位置以后鼠标释放时子控件向父控件产发送的消息,对于Slider来说就是每次滑块被鼠标拖曳完鼠标释放的时候滑块给Slider发送的消息。

通过以下两段代码的执行,我们就可以直观的理解这两个消息的不同点了:

void CCsliderDlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)

{

    // TODO: Add your control notification handler code here

    UpdateData(TRUE);

    m_nEdit=m_ctlSlider.GetPos();  

    UpdateData(FALSE);

    *pResult = 0;

}

 

void CCsliderDlg::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult)

{

// TODO: Add your control notification handler code here

    UpdateData(TRUE);

    m_nEdit=m_ctlSlider.GetPos();  

    UpdateData(FALSE);

    *pResult = 0;

}

还有一个消息就是NM_OUTOFMEMORY,该消息我还不是很会用,该消息的解释是当没有足够内存来相应子控件时向父控件发送的消息。该处只能留下一个疑点供以后考虑