现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

鼠标精确控制CSliderCtrl控件的滑块

2013-01-09 21:50 工业·编程 ⁄ 共 1188字 ⁄ 字号 暂无评论

      最近用MFC写了个音乐播放器,在做通过鼠标点击CSLiderCtrl来控制滑块,调节音量大小的功能,这种效果很容易想象。刚开始学MFC,第一次使用CSLiderCtrl控件,对这个控件不是非常熟,自带的功能里没有找到能满足我需求的,所以自己捉摸了这个方法,跟大家分享下。

      以CSliderCtrl为基类派生出一个新类,我命名为CVolSliderCtrl,添加左击消息响应

void CVolSliderCtrl::OnLButtonDown(UINT nFlags, CPoint point)

     需要搞清楚两个概念:1.CPoint point 传递的值是相对于CSliderCtrl控件左上角的点的坐标。需要注意的是point.x的起点不是控件的滑动槽为0的地方,而是控件最左边。2.CSliderCtrl的中成员函数有关设置控件滑动槽的范围,或滑块的位置(在MSDN中一般用position表示),我暂且说成是“单位”,并且滑动槽的单位是可以设置的。

      先设置滑动槽的range,我音量是256个单位,为了方便我将滑动槽也划分成256个单位,单位划分越多,越细致,滑块的误差就越小,我的滑动槽不大,256个就够了。调用如下两个成员函数,进行初始化。

SetRangeMin(0);
SetRangeMax(255);

     现在来处理鼠标单击消息响应函数:

刚才提到了CPoint传递的参数和成员函数position不是同一种度量,起始点不同的,需要进行转换。先确定滑块从0滑到255对应CPoint.x的范围,确定的方法有很多,我的方法是在单击消息响应函数里用 TRACE打印出这个两个值。

     结果:滑块 0~255 对应 point.x  4~48

设置代码比较简单,代码如下:

    CString str;

double per = 255.0/44.0 ;                              //point.x range 4~48   44=48-4
int volume = per*(point.x-4);                          //所占单元数(MAX 255)

CSliderCtrl::SetPos(volume);                        //设置滑块position

    Music.My_SetSFXMasterVolume(volume);   //设置音量

str.Format("========point.x=============%d================\n",point.x);
     TRACE(str);
     str.Format("========volume=============%d================\n",volume);
     TRACE(str);

给我留言

留言无头像?