www.pudn.com > mp3.rar > MultimediaPlayer.cpp


// MultimediaPlayer.cpp : Defines the initialization routines for the DLL. 
// 
 
#include "stdafx.h" 
#include "MultimediaPlayer.h" 
#include  
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
   
// 
//	Note! 
// 
//		If this DLL is dynamically linked against the MFC 
//		DLLs, any functions exported from this DLL which 
//		call into MFC must have the AFX_MANAGE_STATE macro 
//		added at the very beginning of the function. 
// 
//		For example: 
// 
//		extern "C" BOOL PASCAL EXPORT ExportedFunction() 
//		{ 
//			AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
//			// normal function body here 
//		} 
// 
//		It is very important that this macro appear in each 
//		function, prior to any calls into MFC.  This means that 
//		it must appear as the first statement within the  
//		function, even before any object variable declarations 
//		as their constructors may generate calls into the MFC 
//		DLL. 
// 
//		Please see MFC Technical Notes 33 and 58 for additional 
//		details. 
// 
 
///////////////////////////////////////////////////////////////////////////// 
// CMultimediaPlayerApp 
 
BEGIN_MESSAGE_MAP(CMultimediaPlayerApp, CWinApp) 
	//{{AFX_MSG_MAP(CMultimediaPlayerApp) 
		// NOTE - the ClassWizard will add and remove mapping macros here. 
		//    DO NOT EDIT what you see in these blocks of generated code! 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CMultimediaPlayerApp construction 
 
CMultimediaPlayerApp::CMultimediaPlayerApp() 
{ 
	// TODO: add construction code here, 
	// Place all significant initialization in InitInstance 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// The one and only CMultimediaPlayerApp object 
 
CMultimediaPlayerApp theApp; 
 
IGraphBuilder *pGraph; 
IMediaControl *pMediaControl; 
HRESULT        hr; 
IMediaSeeking  *pMediaSeeking; 
bool bPauseState = false;  //设置暂停的状态 
///////////////////////////////////////////////////////////////////////////// 
// CMultimediaPlayerApp initialization 
 
BOOL CMultimediaPlayerApp::InitInstance() 
{ 
	if (!AfxSocketInit()) 
	{ 
		AfxMessageBox(IDP_SOCKETS_INIT_FAILED); 
		return FALSE; 
	} 
 
	// Register all OLE server (factories) as running.  This enables the 
	//  OLE libraries to create objects from other applications. 
	COleObjectFactory::RegisterAll(); 
 
	return TRUE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// Special entry points required for inproc servers 
/* 
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) 
{ 
	AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
	return AfxDllGetClassObject(rclsid, riid, ppv); 
} 
 
STDAPI DllCanUnloadNow(void) 
{ 
	AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
	return AfxDllCanUnloadNow(); 
} 
 
// by exporting DllRegisterServer, you can use regsvr.exe 
STDAPI DllRegisterServer(void) 
{ 
	AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
	COleObjectFactory::UpdateRegistryAll(); 
	return S_OK; 
} 
*/ 
//初始化播放状态 
void InitPlay(CString FileName) 
{ 
    CoInitialize(NULL); 
 
    // Create the filter graph manager. 
    CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,  
                        IID_IGraphBuilder, (void **)&pGraph); 
    pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); 
 
    // Build the graph. (IMPORTANT: Change string to a file on your system.) 
    pGraph->RenderFile(FileName, NULL);  
	pMediaSeeking=0; 
	hr = pGraph->QueryInterface(IID_IMediaSeeking, (void**)&pMediaSeeking); 
} 
 
void Play(CString FileName) 
{ 
	//如果不是暂停后继续接着原来的位置播放 
	//那么初始化播放状态,加载新的播放文件 
	if(!bPauseState) 
	{ 
		InitPlay(FileName); 
	} 
  	// Run the graph. 
    hr = pMediaControl->Run(); 
	bPauseState = false;  //取消暂停 
} 
 
//结束播放 
void EndPlay() 
{ 
	//释放资源 
    pMediaControl->Release(); 
    pGraph->Release(); 
    CoUninitialize(); 
} 
 
//暂停处理 
void PausePlay(CString FileName) 
{ 
	pMediaControl->Pause(); 
	bPauseState = true;      //设置暂停 
}