您的位置:首页 > 其它

封装mciSendCommand的简单MCI类

2011-03-02 09:30 316 查看

前阵子写了篇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();//销毁该对象

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: