[VC/MFC]滑动动条控件Slider的用法

来源:互联网 发布:淘宝 胖驴 编辑:程序博客网 时间:2024/04/30 07:09

 

MFC中滑动条(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()中添加:

 


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

 

 
本篇文章来源于 3SDN  转载请以链接形式注明出处 网址:http://www.3sdn.net/programing/vc/2008-12-01/107.html

 

 

 

 

 

 

方法二:响应SLIDER的 NM_RELEASEDCAPTURE事件,该事件是当用鼠标调整滑动条的位置,释放鼠标以后,滑动条会发送这个NM_RELEASEDCAPTURE消息

 

SLIDER默认没有MOUSEDOWN 等消息

解决办法一:自己重写一个SLIDER类,响应这些消息

解决办法二:在主窗口中 重载 预处理消息函数 

 

PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当你需要在MFC之前处理某些消息时,常常要在这里添加代码.  

MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。  

一、是否调用TranslateMessage()和DispatchMessage()是由一个名称为PreTranslateMessage()函数的返回值决定的,如果该函数返回TRUE,则不会把该消息分发给窗口函数处理。  

二、传给PreTranslateMessage()的消息是未经翻译过的消息,它没有经过TranslateMessage()处理。可以在该函数中使用(pMsg->wParam==VK_RETURN)来拦截回车键。  

三、在WindowProc里不能处理WM_Char消息。  

四、SetWindowText会发送WM_Char给窗口。  

五、PeekMessage和GetMessage的区别:  

GetMessage在没有消息的时候等待消息,cpu当然低  PeekMessage没有消息的时候立刻返回,可以在没有消息的时候可以做其他处理,但cpu占用率一般较高。  大多游戏都用PeekMessage();