在MFC下MCI的简单调用,封装成类

/***********************************************
 *                    MCI.h                    *
 ***********************************************/
#pragma once
#include "mmsystem.h"

class CMCI
{
private:
	MCIDEVICEID nDeviceID;

public:
	CMCI(void);
	~CMCI(void);
	BOOL Open(CString strSongPath);
	BOOL Play();
	BOOL Pause();
	BOOL Stop();
	BOOL Close();
	BOOL GetCurrentPos(DWORD &pos);
	BOOL SetVolume(int nVolumeValue);
};
/******************************************
 *               MCI.cpp                  *
 ******************************************/
#include "StdAfx.h"
#include "MCI.h"
#include "Digitalv.h"
#pragma comment(lib,"winmm.lib")

CMCI::CMCI(void)
{
	nDeviceID = -1;
}

CMCI::~CMCI(void)
{
}

//打开文件
//成功返回非零值,失败返回0
BOOL CMCI::Open(CString strSongPath)
{
	MCI_OPEN_PARMS mciOP;

	mciOP.lpstrDeviceType = NULL;
	mciOP.lpstrElementName = strSongPath;
	DWORD dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE, (DWORD)(LPVOID)&mciOP);
	if(dwReturn == 0)
	{	
		nDeviceID = mciOP.wDeviceID;
		return TRUE;
	}
	else
	{
		nDeviceID = -1;
		return FALSE;
	}
}

//播放
//成功返回非零值,失败返回0
BOOL CMCI::Play()
{
	MCI_PLAY_PARMS mciPP;

	DWORD dwReturn = mciSendCommand(nDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID)&mciPP);
	if(dwReturn == 0)
		return TRUE;
	else
		return FALSE;
}

//暂停播放
//成功返回非零值,失败返回0
BOOL CMCI::Pause()
{
	MCI_GENERIC_PARMS mciGP;

	DWORD dwReturn = mciSendCommand(nDeviceID, MCI_PAUSE, MCI_NOTIFY | MCI_WAIT, (DWORD)(LPVOID)&mciGP);
	if(dwReturn == 0)
		return TRUE;
	else
		return FALSE;
}

//停止播放并使进度返回到开头
//成功返回非零值,失败返回0
BOOL CMCI::Stop()
{
	MCI_SEEK_PARMS mciSP;

	DWORD dwReturn = mciSendCommand(nDeviceID, MCI_SEEK, MCI_WAIT | MCI_NOTIFY | MCI_SEEK_TO_START, (DWORD)(LPVOID)&mciSP);
	if(dwReturn == 0)
		return TRUE;
	else
		return FALSE;
}

//关闭MCI设备
//成功返回非零值,失败返回0
BOOL CMCI::Close()
{
	MCI_GENERIC_PARMS mciGP;

	DWORD dwReturn = mciSendCommand(nDeviceID, MCI_CLOSE, MCI_NOTIFY | MCI_WAIT, (DWORD)(LPVOID)&mciGP);
	if(dwReturn == 0)
		return TRUE;
	else
		return FALSE;
}

//获得当前播放进度,pos以ms为单位
//成功返回非零值,失败返回0
BOOL CMCI::GetCurrentPos(DWORD &pos)
{
	MCI_STATUS_PARMS mciSP;

	mciSP.dwItem = MCI_STATUS_POSITION;
	DWORD dwReturn = mciSendCommand(nDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP);
	if (dwReturn == 0)
	{
		pos = mciSP.dwReturn;
		return TRUE;
	}
	else
	{
		pos = 0;
		return FALSE;
	}	
}

//音量设定,音量值范围在0到1000
//成功返回非零值,失败返回0
BOOL CMCI::SetVolume(int nVolumeValue)
{
	if(nVolumeValue > 1000)
	{
		nVolumeValue = 1000;
	}
	else if(nVolumeValue < 0)
	{
		nVolumeValue = 0;
	}

	MCI_DGV_SETAUDIO_PARMS mciDSP;

	mciDSP.dwItem = MCI_DGV_SETAUDIO_VOLUME;
	mciDSP.dwValue = nVolumeValue;
	DWORD dwReturn = mciSendCommand(nDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD)(LPVOID)&mciDSP);
	if(dwReturn == 0)
		return TRUE;
	else
		return FALSE;
}


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值