|
发表于 2011-1-8 16:28:00
|
显示全部楼层
Re:做游戏一定要DirectX吗 。windows GDI 行不
关于声音,对于wav一般用directsound(vb6里面的ds库异常方便),如果怕麻烦,或者需要播放非wav,那就用directshow,代码异常简单:
- class CMedia
- {
- private:
- IGraphBuilder *m_pGraphBuilder;
- IMediaControl *m_pMediaControl;
- IMediaPosition *m_pMediaPosition;
- IBasicAudio *m_pBasicAudio;
- IBasicVideo *m_pBasicVideo;
- IVideoWindow *m_pVideoWindow;
- bool m_bPlaying;
- public:
- CMedia()
- {
- m_pGraphBuilder=null;
- m_pMediaControl=null;
- m_pMediaPosition=null;
- m_pBasicAudio=null;
- m_pBasicVideo=null;
- m_pVideoWindow=null;
- m_bPlaying=false;
- }
- protected:
- virtual ~CMedia(){}
- public:
- bool IsOpened()
- {
- return m_pGraphBuilder!=null;
- }
- bool IsPlaying()
- {
- return m_bPlaying;
- }
- void Open(const std::wstring &filename)
- {
- CoInitialize(NULL);
- CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void**)&m_pGraphBuilder);
- m_pGraphBuilder->QueryInterface(IID_IMediaControl,(void**)&m_pMediaControl);
- m_pGraphBuilder->QueryInterface(IID_IMediaPosition,(void**)&m_pMediaPosition);
- m_pGraphBuilder->QueryInterface(IID_IBasicAudio,(void**)&m_pBasicAudio);
- m_pGraphBuilder->QueryInterface(IID_IBasicVideo,(void**)&m_pBasicVideo);
- m_pGraphBuilder->QueryInterface(IID_IVideoWindow,(void**)&m_pVideoWindow);
- m_pMediaControl->RenderFile((BSTR)filename.c_str());
- m_bPlaying=false;
- }
- void Close()
- {
- m_bPlaying=false;
- SafeRelease(m_pVideoWindow);
- SafeRelease(m_pBasicVideo);
- SafeRelease(m_pBasicAudio);
- SafeRelease(m_pMediaPosition);
- SafeRelease(m_pMediaControl);
- SafeRelease(m_pGraphBuilder);
- CoUninitialize();
- }
- void Play()
- {
- if(!m_pMediaControl)return;
- if(0==(m_pMediaControl->Run()))return;
- m_bPlaying=true;
- }
- void Pause()
- {
- if(!m_pMediaControl)return;
- if(0==(m_pMediaControl->Pause()))return;
- m_bPlaying=false;
- }
- void Stop()
- {
- if(!m_pMediaControl)return;
- if(0==(m_pMediaControl->Stop()))return;
- m_bPlaying=false;
- }
- void Seek(double pos)
- {
- if(!m_pMediaPosition)return;
- m_pMediaPosition->put_CurrentPosition(pos);
- }
- double GetDuration()
- {
- double ret=0;
- if(!m_pMediaPosition)return 0;
- m_pMediaPosition->get_Duration(&ret);
- return ret;
- }
- double GetCrrtPos()
- {
- double ret=0;
- if(!m_pMediaPosition)return 0;
- m_pMediaPosition->get_CurrentPosition(&ret);
- return ret;
- }
- double GetRate()
- {
- double ret=0;
- if(!m_pMediaPosition)return 0;
- m_pMediaPosition->get_Rate(&ret);
- return ret;
- }
- void SetRate(double rate)
- {
- if(!m_pMediaPosition)return;
- m_pMediaPosition->put_Rate(rate);
- }
- int GetVolume()
- {
- int ret=0;
- if(!m_pBasicAudio)return 0;
- m_pBasicAudio->get_Volume(&ret);
- return ret;
- }
- void SetVolume(int vol)
- {
- if(!m_pBasicAudio)return;
- m_pBasicAudio->put_Volume(vol);
- }
- void GetVideoSize(int *w,int *h)
- {
- if(!m_pBasicVideo)return;
- m_pBasicVideo->GetVideoSize(w,h);
- }
- void GetDestPos(int *l,int *t,int *w,int *h)
- {
- if(!m_pBasicVideo)return;
- m_pBasicVideo->GetDestinationPosition(l,t,w,h);
- }
- void SetDestPos(int l,int t,int w,int h)
- {
- if(!m_pBasicVideo)return;
- m_pBasicVideo->SetDestinationPosition(l,t,w,h);
- }
- void GetSrcPos(int *l,int *t,int *w,int *h)
- {
- if(!m_pBasicVideo)return;
- m_pBasicVideo->GetSourcePosition(l,t,w,h);
- }
- void SetSrcPos(int l,int t,int w,int h)
- {
- if(!m_pBasicVideo)return;
- m_pBasicVideo->SetSourcePosition(l,t,w,h);
- }
- int GetVideoWndStyle()
- {
- int ret=0;
- if(!m_pVideoWindow)return 0;
- m_pVideoWindow->get_WindowStyle(&ret);
- return ret;
- }
- void SetVideoWndStyle(int style)
- {
- if(!m_pVideoWindow)return;
- m_pVideoWindow->put_WindowStyle(style);
- }
- HWND GetVideoWndOwner()
- {
- HWND ret=(HWND)null;
- if(!m_pVideoWindow)return (HWND)null;
- m_pVideoWindow->get_Owner((OAHWND*)(&ret));
- return ret;
- }
- void SetVideoWndOwner(HWND hwnd)
- {
- if(!m_pVideoWindow)return;
- m_pVideoWindow->put_Owner((OAHWND)hwnd);
- }
- void GetVideoWndPos(int *l,int *t,int *w,int *h)
- {
- if(!m_pVideoWindow)return;
- m_pVideoWindow->GetWindowPosition(l,t,w,h);
- }
- void SetVideoWndPos(int l,int t,int w,int h)
- {
- if(!m_pVideoWindow)return;
- m_pVideoWindow->SetWindowPosition(l,t,w,h);
- }
- };
复制代码 |
|