函数原型:
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);
}
在void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)中添加下面的代码
//上一曲
case IDC_PRESONG:
{
JumpMusic(hwnd,0);
}
break;
//下一曲
case IDC_NEXTSONG:
{
JumpMusic(hwnd,1);
}
break;