首先自己写一个MySlider类。。该类继承 CSliderCtrl类。。
MySlider类响应LButtonDown消息来实现鼠标单击定位。。。
- void MySlider::OnLButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- CSliderCtrl::OnLButtonDown(nFlags, point);
- CRect rectClient,rectChannel;
- GetClientRect(rectClient);
- GetChannelRect(rectChannel);
- int nMax = 0;
- int nMin = 0;
- GetRange(nMin,nMax);
- int nPos =
- (nMax - nMin)*(point.x - rectClient.left - rectChannel.left)/(rectChannel.right - rectChannel.left);
- SetPos(nPos);
- }
void MySlider::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CSliderCtrl::OnLButtonDown(nFlags, point);
CRect rectClient,rectChannel;
GetClientRect(rectClient);
GetChannelRect(rectChannel);
int nMax = 0;
int nMin = 0;
GetRange(nMin,nMax);
int nPos =
(nMax - nMin)*(point.x - rectClient.left - rectChannel.left)/(rectChannel.right - rectChannel.left);
SetPos(nPos);
}
在主界面中:(***Dlg.h)
添加:#include "MySlider.h"
MySlider m_MySlider;
(***Dlg.cpp) 关联变量。。。
- void CCSliderPosDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CCSliderPosDlg)
- // NOTE: the ClassWizard will add DDX and DDV calls here
- //}}AFX_DATA_MAP
- DDX_Control(pDX,IDC_SLIDER1,m_MySlider);
- }
void CCSliderPosDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCSliderPosDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
DDX_Control(pDX,IDC_SLIDER1,m_MySlider);
}
OnInitDialog()
{
m_MySlider.SetRange(0,100); //设置Slider的范围。。。
}
-
1楼
a117653909 2012-03-01 14:21发表 [回复] [引用] [举报]
-
博主那样写得有点小问题,应该这样写
void MySlider::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rectClient,rectChannel;
GetClientRect(rectClient);
GetChannelRect(rectChannel);
int nMax = 0;
int nMin = 0;
GetRange(nMin,nMax);
int nPos = (nMax - nMin)*(point.x - rectClient.left - rectChannel.left)/(rectChannel.right - rectChannel.left);
SetPos(nPos);
CSliderCtrl::OnLButtonDown(nFlags, point);
}