if (dIg DoModal==IDOK filename=dlg. GetFileName0;∥获取打开的文件名 fileext=dlg. GetFileExt(0;∥获取打开的文件扩展名 if(m_ sign) ∥如果程序正在播放,则关闭 I dwErrormciSendCommand('m_MCIDevice/D, MCI_CLOSE,O, NULL) ∥关闭正在播放的声音 i( error)∥如果关闭不成功,则显示出错的原因 lif(mciGetErrorString(dwErro,(LPSTR)Sz Buf, MAXERRORLENGTH)) Message Box(szErrorBut,wMC出错", MB ICONWARNING; e/se MessageBox("不明错误标识"!WMC出错 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( strcmp(Wav,fle)∥当后赘为Mav时 mciOpen Parms pstrDevice Type="waveaudio else if( strcmp("mir" fileext)∥当后辍为m的 mciOpen Parms pstrDevice Type="sequencer,; mciOpen Parms ]pstrElementName=filename; ∥将打开的文件名存入 mciOpen Parm结构体中 dwErrormciSend Command(O, MCI_OPEN, MCI_OPEN_TYPE MCL_ OP EN_ELEMENT(DWORD)(LPVOID)&mciOpenParms ∥发送打开文件命令, 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结构体中
i(dWEo∥如果打开不成功,则显示出错的原因 dif(mciGetErrorString(dwError, ( LPSTR)szErrorBuf, MAXERRORLENGTH) MessageBox( SzErrorBu1"WC出错, MB ICONWARNING else MessageBoX("不明错误标识"!WMC出错" MB ICONWARNING; return; m MC DevicelD= mciOpen Parms w Device/D∥将获取的设备 1D值贴给全局变量 m MC DevicelD m_ sign= FALSE∥设置正在播放标识为 FALSE m_ Asign= FALSE设置正在暂停标识为ALSE }}
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 CMCIPlayerDlg;: On StartButton()∥从头开始播放 IMCI_PLAY_PARMS mciPlayParms; ∥结构体变量存储播放相关信息 i( m_ sIgn)∥如果没有正在播放的声音 ImciPlay Parms dw Callback(long) GetSafeHwnd0; ∥为发送 MM MCINOTFY消息指定窗口句柄 mciPlayParms. dwFrom=0;/设置播放位置从头开始 dwErrormciSend Command(m MCIDevicelD, MCI PLAYMCI FROMMCI NOT/FY(WORD)(LPVOID)&mciPlayParms ∥开始播放声音,参数 MC FROM说明开始播放的位置 包含在 mciPlay Parms结构体中 ∥参数 MCI NOTFY的意义是播放完后发送 MM MCINOTFY 消息
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 [if (mciGetErrorString(dwError, LPSTR)szError Buf, MAXERRORLENGTHI) MessageBox( SzErrorBuf"Wc出错, MB ICONWARNING); e/se MessageBox("不明错误标识yMC出错MB| CONWARNING; return, m_sign=TRE;/设置正在播放标识为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 } }