if (dlg DoModal==/DOK filename= dg. GetFileName0;∥获取打开的文件名 fileext=dg. GetFileEXt0);∥获取打开的文件扩展名 if (m_ SIgn) ∥如果程序正在播放,则关闭 I dwErrormciSendCommand(m_MClDevicelD, MCI_CLOSE, O, NULL) ∥关闭正在播放的声音 i( dwError)∥如果关闭不成功,则显示出错的原因 lif(mciGetErrorString(dwError, ( LPSTR)szErrorBuf, MAXERRORLENGTHI) MessageBox( SzErrorBut1"MC出错, MB /CONWARNING e/ se MessageBox("不明错误标识,"MC出锴, MB ICONWARNING) ∥给出相应报告 return; }}
11 if (dlg.DoModal()==IDOK) { filename=dlg.GetFileName(); //获取打开的文件名 fileext=dlg.GetFileExt(); //获取打开的文件扩展名 if (m_PSign) //如果程序正在播放,则关闭 { dwError=mciSendCommand(m_MCIDeviceID,MCI_CLOSE,0,NULL); //关闭正在播放的声音 if (dwError) //如果关闭不成功,则显示出错的原因 {if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH)) MessageBox(szErrorBuf, "MCI出错" ,MB_ICONWARNING); else MessageBox("不明错误标识" , "MCI出错" ,MB_ICONWARNING); //给出相应报告 return; } }
∥如果没有声音正在播放,则获取打开文件的后额,并 根据后额决定相应的打开类型 i( Istrcmp( wav",fileext))∥当后额为Mav时 mciOpenParms. lpstr Device Type="waveaudio else if( strcmp(mi" fileext))/∥当后辍为mid mciOpen Parms pstr Device Type="sequencer; mciOpen Parms. pstrElementName=filename ∥将打开的文件名存入 mciOpenParms结构体中 dwErrormciSendCommand (0, MCI_OPEN, MCL_OPEN_TYPEMCL_OP EN_ELEMENT( DWORD)(LPVOID)&mciOpen Parms); ∥发送打开文件命令, MC/ OPEN TYPE参数说明设备类 型名包含在 mciOpen Parms结构体中, ∥MC/ OPEN ELEMENT参数说明要打开的文件名包含在 mciOpen Params结构体中
12 //如果没有声音正在播放,则获取打开文件的后辍,并 根据后辍决定相应的打开类型 if (!strcmp("wav" ,fileext)) //当后辍为wav时 mciOpenParms.lpstrDeviceType="waveaudio"; else if (!strcmp("mid" ,fileext))//当后辍为mid时 mciOpenParms.lpstrDeviceType="sequencer"; mciOpenParms.lpstrElementName=filename; //将打开的文件名存入mciOpenParms结构体中 dwError=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OP EN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms); //发送打开文件命令,MCI_OPEN_TYPE参数说明设备类 型名包含在mciOpenParms结构体中, //MCI_OPEN_ELEMENT参数说明要打开的文件名包含在 mciOpenParams结构体中
if( WError∥如果打开不成功,则显示出错的原因 lif(mciGetError String(dwError, LPSTR) SzErrorBuf, MAXERRORLENGTHI) MessageBox( SzErrorBuf"MC出错, MB CONWARNING e/se MessageBox(("不明错禔标识"WC出锴, MB ICONWARNING; return, m mciDeviceD= mciOpen Parms. DEviced;/将获取的设备 D值赋给全局变量mMC| Deviceld m_sign= FALSE∥设置正在播放标识为 FALSE gm= FALSE/设置正在暂停标识为ALSE m Asi
13 if (dwError)//如果打开不成功,则显示出错的原因 {if (mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH)) MessageBox(szErrorBuf, "MCI出错" ,MB_ICONWARNING); else MessageBox("不明错误标识" , "MCI出错" ,MB_ICONWARNING); return; } m_MCIDeviceID=mciOpenParms.wDeviceID;//将获取的设备 ID值赋给全局变量m_MCIDeviceID m_PSign=FALSE;//设置正在播放标识为FALSE m_ASign=FALSE;//设置正在暂停标识为FALSE } }
void cmc| PlayerDlg: On StartButton0∥从头开始播放 IMCI_PLAY_ PARMS mciPlayParms ∥结构体变量存储播放相关信息 if( m_ SIgn)∥如果没有正在播放的声音 ImciPlayParms. dw Callback(long) GetSafeHwndo ∥为发送 MM MCINOTIFY消息指定窗口句柄 mciPlayParms. dwFrom=0/t置播放位置从头开始 dwErrormciSend Command(m_MCIDevice/D, MCI_ PLAYMCI FROMMCI_ NOTIFY,DWORD)(LPVOID)&mciPlayParms); ∥开始播放声音,参数 VCI FROM说明开始播放的位置 包含在 mciPlayParms结构体中 ∥参数 MC NOTIFY的意义是播放完后发送 MM MCINOTIFY 消息
14 void CMCIPlayerDlg::OnStartButton() //从头开始播放 { MCI_PLAY_PARMS mciPlayParms; //结构体变量存储播放相关信息 if (!m_PSign) //如果没有正在播放的声音 {mciPlayParms.dwCallback=(long)GetSafeHwnd(); //为发送MM_MCINOTIFY消息指定窗口句柄 mciPlayParms.dwFrom=0;//设置播放位置从头开始 dwError=mciSendCommand(m_MCIDeviceID,MCI_PLAY,MCI_ FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms); //开始播放声音,参数MCI_FROM说明开始播放的位置 包含在mciPlayParms结构体中 //参数MCI_NOTIFY的意义是播放完后发送MM_MCINOTIFY 消息
if (dwError) dif (mciGetErrorString(dw Error, LPSTR)SzErrorBuf, MAXERRORLENGTH) Message Box(szErrorBut,Wc!出错, MB ICONWARNING else MessageBox("不明错误标织"WC出, MB ICONWARNING; return m_Sign=TRUE∥设置正在播放标识为TRUE }}
15 if (dwError) {if (mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH)) MessageBox(szErrorBuf, "MCI出错" ,MB_ICONWARNING); else MessageBox("不明错误标识" , "MCI出错" ,MB_ICONWARNING); return; } m_PSign=TRUE;//设置正在播放标识为TRUE } }