自绘滑块控件的问题

wangshuhe123 2015-08-20 09:48:39
我是要通过自绘改变滑块和滑道的图像,当我滑动滑块时,要在静态文本框上显示当前值,但是出现了,有时滑动滑块后,GetPos的值不发生改变,从而导致静态文本框上的数值不变,要怎么解决,代码如下:
绘制图像的函数
void CMySlider::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CSliderCtrl::OnPaint()
CRect rectCrl;
GetClientRect(&rectCrl);
//用双缓冲绘图解决图像闪烁问题
CMyDC Memdc(&dc,&rectCrl, TRUE);
m_ChannelImageList.Draw(&Memdc,nThemeIndex,CPoint(Zero,Zero),ILD_TRANSPARENT);
GetChannelRect(&rectChannel);
// //对m_Point的范围进行判断
if(m_Point.x<=rectChannel.left)
{
m_Point.x=rectChannel.left;
}
if(m_Point.x>=rectChannel.right-nThumbLength)
{
m_Point.x=rectChannel.right-nThumbLength;
}
//如果按钮为点击状态
if(m_bClick)
{
m_ThumbImageList[nThemeIndex].Draw(&Memdc,SecondIndex,m_Point,ILD_TRANSPARENT);
}
else
{
//如果按钮为悬停状态
if(m_bHover)
{
m_ThumbImageList[nThemeIndex].Draw(&Memdc,FirstIndex,m_Point,ILD_TRANSPARENT);
}
//如果按钮为离开状态
else
{
m_ThumbImageList[nThemeIndex].Draw(&Memdc,ZeroIndex,m_Point,ILD_TRANSPARENT);
}
}
}
响应鼠标移动的函数
void CMySlider::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(m_bClick)
{
int nCurrentMinute=GetPos();
double dScale=(double)(nCurrentMinute-nMinValue)/(nMaxValue-nMinValue);
m_Point.x=rectChannel.left+rectChannel.Width()*dScale;
}
//rectThumb
rectThumb.left=m_Point.x;
rectThumb.right=rectThumb.left+m_ThumbImageInfo.bmWidth/ThumbImageNumber;
rectThumb.top=m_Point.y;
rectThumb.bottom=rectThumb.top+m_ThumbImageInfo.bmHeight;
if (!m_bTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = HoverTime;
m_bTracking = TrackMouseEvent(&tme);
}
Invalidate();
CSliderCtrl::OnMouseMove(nFlags, point);
}

...全文
335 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧