现在的位置: 首页 > 综合 > 正文

自己动手写类似酷狗播放器(3)_Slider控件使用

2013年03月07日 ⁄ 综合 ⁄ 共 1703字 ⁄ 字号 评论关闭
     本节总结下音乐播放中slider控件的使用,包括两个方面,slider控制播放时间和控制播放声音(这里不是系统的音量)而是声道的音量.
     目标:1.通过播放进度条来控制播放进度
	   2.通过声音进度条来控制声音大小

1.如何操作一个进度条

	其实操作一个进度条非常简单,就是向该进度条控件发送命令即可。
步骤:(1).设置进度条的范围大小,最小值为都少,最大值为多少
      (2).然后就向进度条发送命令,告诉其显示的位置,或者获取它的当前位置
下面的例子显示了如何设置进度条两端的范围和设置和获取位置。
SendDlgItemMessage(hwnd,IDC_SLIDER_SONG,TBM_SETRANGE,TRUE,MAKELPARAM(0,dwsonglen));//设置Silder的两端范围  0~dwsonglen
SendDlgItemMessage(hwnd,IDC_SLIDER_SONG,TBM_SETPOS,TRUE,0);//设置当前进度为0,最后一个参数为设置的大小
SendDlgItemMessage(hwnd,IDC_SLIDER_SONG,TBM_GETPOS,0,0); //获取当前进度条的位置

都是用SendMessage来操作进度条的。

2.当进度条发生移动时候,如何触发操作?

    在播放进度条中,我们希望用户可以自己快进或者后退。如何实现呢?这里主要用到一个事件,WM_HSCROLL(水平变化时),进度条可以是水平的,也可以垂直的,比如我们的系统音量。这里我们的都是用水平样式的,所以就选择该事件,也就是说,当进度条发生操作的时候,就会产生这个事件,我们要做的就是在主窗口处理函数(slider控件所在的窗口)中,处理该事件即可:这时候要查找MSDN上关于WM_HSCROLL事件其他两个参数的意义。
  WPARAM wParam,   // request and position   
  LPARAM lParam    // handle to scroll bar (HWND) slider的控件句柄
然后处理:	a.获取当前的位置
		b.将其转化为时间格式
		c.然后设置mciplay.dwFrom字段,就是要从哪个位置开始播放。
		d.mciSendCommand播放即可。
设置播放设备音量也是一样,waveOutSetVolume,waveOutGetVolume两个API来实现的,具体的逻辑可MSDN。
下面的代码是播放器这个模块的:
case WM_HSCROLL: //当slider发生鼠标移动时候
			{	
				if((HWND)lParam==hslider_song)  //lParam返回的是滑块的句柄 这样可以避免两个滑块之间的影响
				{
					icount=SendDlgItemMessage(hwnd,IDC_SLIDER_SONG,TBM_GETPOS,0,0);	//获取slider位置
					mciseek.dwTo=icount*1000;  //注意这里要乘以1000回去啊  单位是MS级别的
					mciSendCommand(DeviceId,MCI_SEEK,MCI_WAIT|MCI_TO,(DWORD)(LPMCI_SEEK_PARMS)&mciseek);//跳转但不播放
					mciplay.dwFrom=icount*1000; //更新播放进程
					mciSendCommand(DeviceId,MCI_PLAY,MCI_NOTIFY|MCI_FROM,(DWORD)(LPMCI_PLAY_PARMS)&mciplay);//继续播放
				}	
				if((HWND)lParam==hslider_vol) //声音音量的调节
				{
					DWORD volpos=SendDlgItemMessage(hwnd,IDC_SLIDER_VOL,TBM_GETPOS,0,0)*0XFF; //获取slider的大小 
					leftVol=RightVol=(WORD)volpos;
					dwVol=MAKELONG(leftVol,RightVol); //左声道是低16位 右声道是高16位
					waveOutSetVolume(0,dwVol);
				}	
				break;
			}
上面代码包括声音播放进度功能和声道音量功能.

抱歉!评论已关闭.