热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

音量控制和播放进度也是音乐播放器中的基本的操作首先定义一个函数用于控制音量控制音量voidMain_OnSlider(HWNDhwnd,HWNDhwndCtl,UINTcode

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

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

//控制音量
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);//设置播放进度的最小值为0SendDlgItemMessage(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);
}


实现效果





推荐阅读
author-avatar
葬宝御用小奶瓶2004
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有