前阵子写了篇mciSendCommand简介的文章,大家看得比较多,说明大家需要这方面的东西哈。今天有空写了个简单的MCI类给大家贴出来。这个类很简单,只实现了简单的文件打开、播放、暂停、继续、关闭几个功能,供大家学习研究哈。如果哪位高手把这个类扩展了也请给我一份哈,以备不时之需哈。
这个类必须在MFC支持下才能使用,因为用了MFC 的CString。请在编译的时候链接上winmm.lib
类的代码如下:
//CMCI.h
//
#include <mmsystem.h>
class CMCI
{
public:
void Resume();
void Pause();
void Close();
void Play(UINT From,UINT To);
UINT m_iDeviceType;
CMCI(CString FilePath,CString DeviceType);
virtual ~CMCI();
};
//cMCI.cpp
/
#include "cMCI.h"
CMCI::CMCI(CString FilePath,CString DeviceType="MPEGAudio")
{
MCI_OPEN_PARMS pm;
pm.dwCallback=NULL;
pm.lpstrAlias=NULL;
pm.lpstrDeviceType=DeviceType;
pm.lpstrElementName=FilePath;
pm.wDeviceID=NULL;
if(0==mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)&pm))
{
this->m_iDeviceType=pm.wDeviceID;
}
}
CMCI::~CMCI()
{
if(this->m_iDeviceType) Close();
}
void CMCI::Play(UINT From, UINT To)
{
MCI_PLAY_PARMS pm;
pm.dwCallback=0;
pm.dwFrom=From;
pm.dwTo=To;
if(!this->m_iDeviceType) return;
mciSendCommand(this->m_iDeviceType,
MCI_PLAY,
MCI_NOTIFY,
(DWORD)&pm);
}
void CMCI::Close()
{
if(this->m_iDeviceType)
{
MCI_GENERIC_PARMS gp;
gp.dwCallback=NULL;
mciSendCommand(this->m_iDeviceType,
MCI_CLOSE,
MCI_WAIT,
(DWORD)&gp);
this->m_iDeviceType=NULL;
}
}
void CMCI::Pause()
{
if(this->m_iDeviceType )
{
MCI_GENERIC_PARMS gp;
gp.dwCallback=NULL;
mciSendCommand(this->m_iDeviceType,
MCI_PAUSE,
MCI_WAIT,
(DWORD)&gp);
}
}
void CMCI::Resume()
{
if(this->m_iDeviceType )
{
MCI_GENERIC_PARMS gp;
gp.dwCallback=NULL;
mciSendCommand(this->m_iDeviceType,
MCI_RESUME,
MCI_WAIT,
(DWORD)&gp);
}
}
这个类的用法:
1、在CXXDlg.h中加入成员变量
CMCI *mymci;
2、在某个消息中构建CMCI的实例并播放文件
CString str1="e://1.mp3";//路径
mymci=new CMCI(str1);//构建对象实例
mymci->Play();//调用方法
3、在适当的时候(通常是程序退出)关闭对象
mymci->Close();
请注意,不要在堆栈中写这样的代码:
CMCI mci;
mci.Play()
这样并不会播放某个文件,因为在这段代码结束的时候,刚才定义的对象已经释放销毁了。
成员列表:
void Resume(); //继续播放
void Pause();//暂停播放
void Close();//关闭该对象(文件)
void Play(UINT From,UINT To);//开始播放
UINT m_iDeviceType;//该文件(对象)的mciSendCommand中的MciDevice
CMCI(CString FilePath,CString DeviceType);//构造器,初始化该对象(文件)
virtual ~CMCI();//销毁该对象