📄 mp3.cpp
字号:
// Mp3.cpp : implementation file
//
#include "stdafx.h"
#include "test1.h"
#include "Mp3.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMp3
CMp3::CMp3(CWnd* pParent /*=NULL*/)
{
m_pParentWnd = pParent;
m_pSeek = NULL;
m_pControl = NULL;
m_pEvent = NULL;
m_pGraph = NULL;
m_bStat = S_NOLOAD;
// 初始化COM库
if(FAILED(CoInitialize(NULL)))
{
TRACE(L"ERROR - Could not initialize COM library");
return;
}
// 创建筛选器表管理器,并查询接口
if(FAILED(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&m_pGraph)))
{
TRACE(L"ERROR - Could not create the Filter Graph Manager.");
return;
}
if(FAILED(m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl)))
{
TRACE(L"ERROR - Could note Create MediaControl.");
return;
}
if(FAILED(m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent)))
{
TRACE(L"ERROR - Could note Create MediaEvent.");
return;
}
}
CMp3::~CMp3()
{
if(m_pGraph)
{
m_pSeek->Release();
m_pControl->Release();
m_pEvent->SetNotifyWindow(NULL, 0, 0);
m_pEvent->Release();
m_pGraph->Release();
CoUninitialize();
}
}
BEGIN_MESSAGE_MAP(CMp3, CWnd)
//{{AFX_MSG_MAP(CMp3)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_GRAPHNOTIFY, OnGraphNotify)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMp3 message handlers
HRESULT CMp3::LoadFile(unsigned short* filename)
{
// 创建表。重点:将字符串改为您系统上的文件名称
if(FAILED(m_pControl->RenderFile(filename)))
{
TRACE(L"Error - Could not load file.");
m_bStat = S_STOP;
return S_FALSE;
}
else
{
if(FAILED(m_pGraph->QueryInterface(IID_IMediaSeeking, (void**)&m_pSeek)))
{
TRACE(L"Err-r - Could not Create Seeking");
return S_FALSE;
}
else
{
m_pEvent->SetNotifyWindow((OAHWND)m_pParentWnd->m_hWnd, WM_GRAPHNOTIFY, 0);
m_bStat = S_LOAD;
return S_OK;
}
}
}
void CMp3::OnGraphNotify(WPARAM wParam, LPARAM lParam)
{
if(m_pEvent)
{
long eventcode = 0, eventparam1 = 0, eventparam2 = 0;
while(SUCCEEDED(m_pEvent->GetEvent(&eventcode, &eventparam1, &eventparam2, INFINITE)))
{
m_pEvent->FreeEventParams(eventcode, eventparam1, eventparam2);
switch(eventcode)
{
case EC_COMPLETE:
m_bStat = S_STOP;
//do complete
break;
case EC_USERABORT:
m_bStat = S_STOP;
//do user abort
break;
case EC_ERRORABORT:
m_bStat = S_STOP;
//do error abort
break;
default:
break;
}
}
}
}
HRESULT CMp3::Play()
{
HRESULT hr = S_FALSE;
if(m_pControl)
{
hr = m_pControl->Run();
if(hr == S_OK)
m_bStat = S_PLAY;
}
return hr;
}
HRESULT CMp3::Pause()
{
HRESULT hr = S_FALSE;
if(m_pControl)
{
hr = m_pControl->Pause();
if(hr == S_OK)
m_bStat = S_PAUSE;
}
return hr;
}
HRESULT CMp3::Stop()
{
HRESULT hr = S_FALSE;
if(m_pControl)
{
hr = m_pControl->Stop();
if(hr == S_OK)
m_bStat = S_STOP;
}
return hr;
}
HRESULT CMp3::GetCurPosi(LONGLONG *curposi)
{
return m_pSeek->GetCurrentPosition(curposi);
}
HRESULT CMp3::GetZCount(LONGLONG *cnt)
{
return m_pSeek->GetDuration(cnt);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -