室内去甲醛最快方法:求助:关于MCI的一个奇怪的问题

来源:百度文库 编辑:高校问答 时间:2024/05/03 13:19:51
我在SDK编程中,用MCI来播放音乐,可是没法停止,
mciSendCommand (OpenParms.wDeviceID, MCI_STOP,NULL,NULL);
mciSendCommand (OpenParms.wDeviceID, MCI_CLOSE,NULL,NULL);
这样的两个语句无效。
说明:我在一个Play函数中打开设备并开始播放,在Stop函数中用上面的两句话关闭,可是关闭不了。如果把这两个语句放在Play函数中,在播放后延迟10秒(Sleep(10000)),可以实现在10秒后自动关闭。求各位帮帮我,甚急!!!
具体是这样的:
类的声明部分:#include <windows.h>
class playMusic
{
private:
MCI_OPEN_PARMS OpenParms;
MCI_PLAY_PARMS PlayParms;
public:
playMusic(char *fileName);
BOOL Play();
BOOL Stop();
};实现部分:
playMusic::playMusic(char *fileName)
{
OpenParms.lpstrDeviceType =
(LPCSTR) MCI_DEVTYPE_SEQUENCER;//音乐类型为MIDI
OpenParms.lpstrElementName = (LPCSTR)fileName;

}
BOOL playMusic::Play ()
{
OpenParms.wDeviceID = 0;
//打开设备
mciSendCommand (NULL, MCI_OPEN,
MCI_WAIT | MCI_OPEN_TYPE |
MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
(DWORD)(LPVOID) &OpenParms);
//播放位置,单位为毫秒
PlayParms.dwFrom = 0;
//开始播放
mciSendCommand (OpenParms.wDeviceID, MCI_PLAY,
MCI_FROM, (DWORD)(LPVOID)&PlayParms);
return TRUE;
}
BOOL playMusic::Stop ()
{
mciSendCommand (OpenParms.wDeviceID, MCI_STOP,NULL,NULL);
mciSendCommand (OpenParms.wDeviceID, MCI_CLOSE,NULL,NULL);
return TRUE;
}
这样就关闭不了,如果将Play函数修改一下,可以实现自动5秒后关闭:
BOOL playMusic::Play ()
{
OpenParms.wDeviceID = 0;
//打开设备
mciSendCommand (NULL, MCI_OPEN,
MCI_WAIT | MCI_OPEN_TYPE |
MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
(DWORD)(LPVOID) &OpenParms);
//播放位置,单位为毫秒
PlayParms.dwFrom = 0;
//开始播放
mciSendCommand (OpenParms.wDeviceID, MCI_PLAY,
MCI_FROM, (DWORD)(LPVOID)&PlayParms);
//新添加部分
Sleep(5000);
mciSendCommand (OpenParms.wDeviceID, MCI_STOP,NULL,NULL);
mciSendCommand (OpenParms.wDeviceID, MCI_CLOSE,NULL,NULL);
return TRUE;
}
解决了,后来莫名其妙就好了。
不是Sleep的问题,那只是我证明一下结束语句的功能。

把Sleep(5000)改为Sleep(5)不就行了。