自己动手开发音乐播放器《七》使用滑块实现音量和播放进度

音量控制和播放进度也是音乐播放器中的基本的操作

首先定义一个函数用于控制音量

//控制音量
void Main_OnSlider(HWND hwnd,HWND hwndCtl,UINT code,int pos);


然后在BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)中添加下面的代码

  	HANDLE_MSG(hWnd, WM_HSCROLL,Main_OnSlider);//响应音量滑动条被拖动 


最后在完善Main_OnSlider中的代码

//音量滑块被拖动
void Main_OnSlider(HWND hwnd,HWND hwndCtl,UINT code,int pos)
{
	//判断是否拖动了音量滑块
	switch(GetDlgCtrlID(hwndCtl))
	{
		//拖动音量滑块
		case IDC_VOLUME_SLIDER:
		{
			//调节音量
			SetVolume(hwnd);
		}
		break;
	}
}

运行效果


播放进度的实现:

实现播放进度和音量控制类似,需要用到回调函数1秒钟调用一次

计算一首歌曲的总长度

定义一些全局变量用于实现歌曲的总播放时间

/****************************************************************************
                  计算歌曲的总播放时间所需的全局变量
*****************************************************************************/
static TCHAR musicTotalTime[256];//保存歌曲的总时间

static int TotalSecond;//保存歌曲的总时间(秒)


定义一个函数用于计算歌曲的总时长

/***************************************************************************
                 函数名:   void MusicTotalTime(HWND hwnd)
				 函数功能: 计算一首歌曲的总时间
****************************************************************************/
void MusicTotalTime(HWND hwnd)
{
	TCHAR musicTotalLength[256];//保存歌曲的总时长

	TCHAR cmd[MAX_PATH];//保存播放命令

	GetMusic(hwnd);//得到选中的歌曲
	
	int Minute;//保存歌曲的时间(分钟)

	//打印得到歌曲的总时长的命令
	wsprintf(cmd,"status %s length",OpenMusicFile);

	//发送得到歌曲的总时长的命令
	mciSendString(cmd,musicTotalLength,sizeof(musicTotalLength)/sizeof(TCHAR),NULL);

	//得到歌曲的总时长(秒)
	TotalSecond = atoi(musicTotalLength)/1000;

	//得到歌曲的时间长度(分)
	Minute = TotalSecond / 60;

	//得到歌曲的时长(秒)
	int Second = TotalSecond - (Minute * 60);

	//打印歌曲的时长
	wsprintf(musicTotalTime,"%02d:%02d",Minute,Second);

	//显示歌曲的时长
	SetDlgItemText(hwnd,IDC_WHOLE_TIME,musicTotalTime);
}


在PlayMusic中定义一个定时器用于处理播放进度

	SetTimer(hwnd,2,1000,SetProgressBar);//用于处理播放进度


完善SetProgressBar函数

/***************************************************************************j
                     函数名:   SetProgressBar
					 函数功能: 播放歌曲时滑动条自动滑动
****************************************************************************/
void CALLBACK SetProgressBar(HWND hwnd, UINT message, UINT iTimerId,DWORD dwTime)
{
	TCHAR nowMusicTime[256];//保存歌曲的播放位置

	TCHAR totalLength[256];//保存歌曲的长度

	TCHAR cmd[MAX_PATH];//保存播放命令

	//打印得到歌曲的长度的命令
	wsprintf(cmd,"status %s length",OpenMusicFile);

	//发送得到歌曲的长度的命令
	mciSendString(cmd,totalLength,sizeof(totalLength)/sizeof(TCHAR),NULL);

	//得到歌曲的总时长
	int totalSecond = atoi(totalLength) / 1000;

	//设置播放进度条的最大值是歌曲的长度
	SendDlgItemMessage(hwnd,IDC_MUSIC_SLIDER,TBM_SETRANGEMAX,false,(LPARAM)totalSecond);

	//设置播放进度的最小值为0
	SendDlgItemMessage(hwnd,IDC_MUSIC_SLIDER,TBM_SETRANGEMIN,false,(LPARAM)0);

	//打印得到播放位置的命令
	wsprintf(cmd,"status %s position",OpenMusicFile);

	//发送得到播放位置的命令
	mciSendString(cmd,nowMusicTime,sizeof(nowMusicTime)/sizeof(TCHAR),NULL);

	int musicSliderTime = atoi(nowMusicTime) / 1000;

	//设置播放进度
	SendDlgItemMessage(hwnd,IDC_MUSIC_SLIDER,TBM_SETPOS, true,(LPARAM)musicSliderTime);
}


实现效果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值