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; //设置暂停 }