mymidi.cpp

来自「Visual_C++.NET实用编程百例」· C++ 代码 · 共 98 行

CPP
98
字号
#include "StdAfx.h"
#include ".\mymidi.h"


CMyMidi::CMyMidi(void)
{
}

CMyMidi::~CMyMidi(void)
{
}

// 打开设备
DWORD CMyMidi::Open(CString fileName)
{
	DWORD dwFlags=MCI_OPEN_TYPE|MCI_OPEN_ELEMENT;
	MCI_OPEN_PARMS mciOpenParms;
	MCI_STATUS_PARMS mciStatusParms;
	MCI_SEQ_SET_PARMS mciSeqSetParms;
	mciOpenParms.lpstrDeviceType = "sequencer";
	mciOpenParms.lpstrElementName = (LPCSTR)fileName;
	DWORD m_return;
	if(m_return=mciSendCommand(NULL,MCI_OPEN,dwFlags,(DWORD)(LPVOID)&mciOpenParms))
		return m_return;
	m_Status=Opened;
	m_wDeviceID=mciOpenParms.wDeviceID ;
	mciStatusParms.dwItem = MCI_SEQ_STATUS_PORT;
	if(m_return = mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms))
	{
		mciSendCommand(m_wDeviceID,MCI_CLOSE,0,NULL);
		m_Status=Closed;
		return m_return;
	}
	return m_return;
}

// //关闭设备
void CMyMidi::Close(void)
{
	mciSendCommand(m_wDeviceID,MCI_CLOSE,0,NULL);
	m_Status = Closed;
}

// //播放音乐
DWORD CMyMidi::Play(HWND hWndNotify, CString fileName)
{
	DWORD m_return;
	MCI_PLAY_PARMS mciPlayParms;
	mciPlayParms.dwCallback =(DWORD)hWndNotify;
	mciPlayParms.dwFrom=0;
	if(m_Status==Closed)
		Open(fileName);
	if(m_return=mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms))
	{
		MessageBox(hWndNotify,"播放失败了",NULL,MB_OK);
		mciSendCommand(m_wDeviceID,MCI_CLOSE,0,NULL);
		m_Status=Closed;
		return m_return;
	}
	m_Status=Played;
	return 0L;
}

// //停止播放
void CMyMidi::Pause(void)
{
	MCI_PLAY_PARMS PlayParms;
	if(mciSendCommand(m_wDeviceID,MCI_PAUSE,MCI_NOTIFY,(DWORD)(LPVOID)&PlayParms)==0)
		m_Status=Paused;
}

// //暂停播放
void CMyMidi::Stop(void)
{
	mciSendCommand(m_wDeviceID,MCI_STOP,NULL,NULL);
	m_Status=Stoped;
	Close();
}

void CMyMidi::Resume(void)
{
	MCI_GENERIC_PARMS ResumeParms;
	if(mciSendCommand(m_wDeviceID,MCI_RESUME,MCI_WAIT,(DWORD)(LPVOID)&ResumeParms)==0)
		m_Status = Played;
}

// 获取设备信息
DWORD CMyMidi::GetStatus(DWORD dwItem, HWND m_hWnd)
{
	MCI_STATUS_PARMS mciStatusParms;
	mciStatusParms.dwCallback =(DWORD)m_hWnd;
	mciStatusParms.dwItem = dwItem;
	mciStatusParms.dwReturn=0;
	DWORD dwReturn;
	dwReturn=mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);
	return mciStatusParms.dwReturn ;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?