函数原型:
MCIERROR mciSendString(
LPCTSTR lpszCommand, 命令字符串
LPTSTR lpszReturnString, 返回的字符串
UINT cchReturn, 返回字符串的大小
HANDLE hwndCallback 回调句柄(一般为NULL)
);
其中的第一个参数的格式:
播放命令+音乐文件
如:mciSendString("play D:\\1.mp3",NULL,0,NULL);
中 play表示播放命令 D:\\1.mp3表示音乐文件
在写代码前先定义一些全局变量和函数
全局变量
/************************************************************************** 播放歌曲所需的全局变量 ****************************************************************************/ static int numPlayMusicNow = 0;//正在播放的歌曲的序号
PlayMusic函数用于播放音乐
/**************************************************************************** 函数名: void PlayMusic(HWND hwnd) 函数功能: 播放歌曲 ****************************************************************************/ void PlayMusic(HWND hwnd) { TCHAR cmd[MAX_PATH];//保存播放歌曲的命令 //打印关闭歌曲的命令 wsprintf(cmd,"close %s",OpenMusicFile); ///发送关闭歌曲的命令 mciSendString(cmd, "", 0, NULL); GetMusic(hwnd);//得到选择的歌曲 //显示正在播放的歌曲 SetDlgItemText(hwnd,IDC_PLAYEDIT,line); wsprintf(cmd,"open %s alias",OpenMusicFile); mciSendString(cmd,0,0,NULL); //打印播放歌曲的命令 wsprintf(cmd,"play %s",OpenMusicFile); //发送播放歌曲的命令 mciSendString(cmd,0,0,NULL); }
然后在void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)中添加下面的代码
//播放歌曲 case IDC_PLAY: { PlayMusic(hwnd); } break;
运行结果(播放成龙的少年强)
暂停的实现代码暂停和播放类似也是定义一些全局变量和函数
首先定义一个全局变量
/*********************************************************************************************** 实现暂停播放所需的全局变量 *************************************************************************************************/ static int flagPauseOrPlay = 0;//暂停播放的标志位(歌曲是暂停还是播放)
然后定义一个函数PauseMusic实现暂停播放
/********************************************************************************************** 函数名: void PauseMusic(HWND hwnd) 函数功能: 暂停歌曲 ***********************************************************************************************/ void PauseMusic(HWND hwnd) { //得到暂停按钮上的句柄 HWND hwndPause = GetDlgItem(hwnd,IDC_PAUSE); TCHAR cmd[256]; //当按下了继续按钮 if(1 == flagPauseOrPlay) { //继续按钮变成暂停按钮 SetWindowText(hwndPause,TEXT("暂停")); //打印播放命令 wsprintf(cmd,"play %s",OpenMusicFile); //发送播放命令 mciSendString(cmd,NULL,0,0); //修改标志位(表示用户按下了继续按钮) flagPauseOrPlay = 0; } else if(0 == flagPauseOrPlay)//当按了暂停后 { //暂停按钮变成继续按钮 SetWindowText(hwndPause,TEXT("继续")); //打印暂停命令 wsprintf(cmd,"pause %s",OpenMusicFile); //执行暂停命令 mciSendString(cmd,NULL,0,0); //修改标志位(表示用户按下了暂停按钮) flagPauseOrPlay = 1; } }
最后在void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)中添加下面的代码
//暂停 case IDC_PAUSE: { PauseMusic(hwnd); } break;
实现效果
停止播放的实现
/*********************************************************************************************** 函数名:void StopMusic(HWND hwnd) 函数功能:停止播放 ************************************************************************************************/ void StopMusic(HWND hwnd) { TCHAR cmd[256]; wsprintf(cmd,"stop %s",OpenMusicFile); mciSendString(cmd,NULL,0,0); }
在void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)中添加下面的代码
//停止 case IDC_STOP: { StopMusic(hwnd); } break;
上一曲或下一曲的实现
全局变量
/**************************************************************************************************************** 实现上一曲和下一曲所需的全局变量 *****************************************************************************************************************/ static int totalMusicCount;//播放列表中歌曲的总数 static NumPlayMusicNow;//选择歌曲的编号 static int iLoopType = 0;//播放方式:初始为单曲模式
函数
/*********************************************************************************************** 函数名: void JumpMusic(HWND hwnd,int num) 函数功能: 实现上一曲(num=0)或下一曲(num=1) ************************************************************************************************/ void JumpMusic(HWND hwnd,int num) { HWND hwndList = GetDlgItem(hwnd,IDC_LIST1); //得到选择的歌曲的序号 numPlayMusicNow = ListBox_GetCurSel(hwndList); //得到歌曲总数 totalMusicCount = ListBox_GetCount(hwndList); /*下面的代码是处理随机播放中的上一曲和下一曲*/ if(0==num)//上一曲 { //随机播放 if(3 == iLoopType) { //随机生成歌曲的序号 numPlayMusicNow = rand() % totalMusicCount; } else { //当正在播放的歌曲的序号大于0时 if(numPlayMusicNow > 0) { //上一曲 numPlayMusicNow = numPlayMusicNow - 1; } else if(0 == numPlayMusicNow)//当在播放第1首歌时 { //跳到最后一首歌曲 numPlayMusicNow = totalMusicCount - 1; } } } else if(1 == num)//下一曲 { if(3 == iLoopType) { //随机生成歌曲的序号 numPlayMusicNow = rand() % totalMusicCount; } else { //当正在播放的歌曲的序号小于歌曲的最大序号时 if(numPlayMusicNow < totalMusicCount - 1) { //下一曲 numPlayMusicNow = numPlayMusicNow + 1; } //当正在播放最后一首歌时 else if(numPlayMusicNow == totalMusicCount - 1) { //跳到第一首歌 numPlayMusicNow = 0; } } } //设置歌曲的序号 ListBox_SetCurSel(hwndList,numPlayMusicNow); //得到歌曲的序号 numPlayMusicNow = ListBox_GetCurSel(hwndList); //播放歌曲 PlayMusic(hwnd); }
//上一曲 case IDC_PRESONG: { JumpMusic(hwnd,0); } break; //下一曲 case IDC_NEXTSONG: { JumpMusic(hwnd,1); } break;