首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

帮小弟我改改下面这段视频播放的程序,好吗?非常感谢

2012-02-22 
求助:各位大哥帮我改改下面这段视频播放的程序,好吗?非常感谢!//播放所有wave,mps,和视频文件classCVideo{

求助:各位大哥帮我改改下面这段视频播放的程序,好吗?非常感谢!
//播放所有wave,mps,和视频文件
class   CVideo
{
private:
///   direct   show
IGraphBuilder*m_pGraph;//   Filter对象
IMediaControl*m_pMediaControl;//   流媒体播放器
IMediaPosition*m_pMediaPosition;//   播放位置
IMediaEvent*m_pEvent;//   流媒体触发事件
IVideoWindow*m_pViewWin;//   播放视频的窗口
HWNDm_hWnd;//   窗口句柄
BOOLm_isLoop;//   是否循环播放

///   direct   sound
LPDIRECTSOUND8m_pSound;//   声音硬件指针
LPDIRECTSOUNDBUFFERm_pSBuffer;//   声音缓冲
DSBUFFERDESCm_dsdesc;


//初始化流媒体播放
HRESULT   InitStream();

//初始音效播放
HRESULT   InitSound();


//载入指定文件名的音乐,视频文件

public:
bool   readfile(   LPSTR   pFileName   );
EnumVideom_Id;
//构造函数,初始化各接口,为播放作准备
CVideo(   HWND   hWnd   =   NULL   );

virtual   ~CVideo();

//播放Mp3音乐
bool   Play(   LPSTR   pFileName   ,   EnumVideo   Id,   BOOL   isLoop   =   false   );
};


#include   "..\\H\\Video.h "


//初始化各接口,为播放作准备
CVideo::CVideo(   HWND   hWnd   )
{
///   direct   show
//   先赋空值,在初始化
m_pGraph=   NULL;//   流过滤器
m_pMediaControl=   NULL;//   流媒体播放器
m_pMediaPosition=   NULL;//   播放位置
m_pEvent=   NULL;//   流媒体触发事件
m_pViewWin=   NULL;
m_hWnd=   hWnd;//   播放视频的窗口

///   direct   sound
//   赋空
m_pSound=   NULL;//   音效的硬件指针
m_pSBuffer=   NULL;

InitSound();
//   初始化流媒体播放
InitStream();
}

//初始化流媒体播放
HRESULT   CVideo::InitStream()
{
//   创建过滤器
  CoInitialize(   NULL   );
CoCreateInstance(CLSID_FilterGraph,   NULL,
                                          CLSCTX_INPROC,   IID_IGraphBuilder,   (void**)&m_pGraph);

//   创建控制器
m_pGraph-> QueryInterface(   IID_IMediaControl,   (   void**   )&m_pMediaControl   );

//   创建播放位置
m_pGraph-> QueryInterface(   IID_IMediaPosition,   (   void**   )&m_pMediaPosition   );

//   创建事件响应接口
m_pGraph-> QueryInterface(   IID_IMediaEvent,   (   void**   )&m_pEvent   );

//   创建播放窗口
m_pGraph-> QueryInterface(   IID_IVideoWindow,   (   void**   )&m_pViewWin   );


return   S_OK;
}


//载入指定文件名的音乐,视频文件
bool   CVideo::readfile(   LPSTR   pFileName   )
{
WCHAR   wstrSoundPath[MAX_PATH];
CHAR   strSoundPath[MAX_PATH];
static   HWND   hDrain   =   0;

switch(   m_Id   )
{
case   VIDEO_MOVING:
//   得到sound文件夹名
GetCurrentDirectory(MAX_PATH,   strSoundPath);
strcat(strSoundPath,   "\\ ");
strcat(strSoundPath,   pFileName);

//变为宽字节,防止中文路径有错误
MultiByteToWideChar(CP_ACP,   0,   strSoundPath,   -1,   wstrSoundPath,   MAX_PATH);
if(S_OK!=   m_pGraph-> RenderFile(wstrSoundPath,   NULL))//MustBe   NULL
return   false;



break;
case   VIDEO_MP3:
//   得到sound文件夹名
GetCurrentDirectory(MAX_PATH,   strSoundPath);
strcat(strSoundPath,   "\\ ");
strcat(strSoundPath,   pFileName);

//变为宽字节,防止中文路径有错误
MultiByteToWideChar(CP_ACP,   0,   strSoundPath,   -1,   wstrSoundPath,   MAX_PATH);

//   渲染文件
m_pGraph-> RenderFile(wstrSoundPath,   NULL);
break;
}

return   true;
}


//播放VIDEO音乐
bool   CVideo::Play(   LPSTR   pFileName,   EnumVideo   Id,   BOOL   isLoop   )
{
m_Id=   Id;
m_isLoop=   isLoop;
//   载入
if(   !readfile(   pFileName   )   )
{
return   false;
}

switch(   Id   )
{
case   VIDEO_MOVING:
//设置当前位置
m_pMediaPosition-> put_CurrentPosition(0);
if(m_pViewWin   !=   NULL   )
m_pViewWin-> put_Owner((OAHWND)m_hWnd);  
m_pViewWin-> put_WindowStyle(WS_CHILD   |   WS_CLIPSIBLINGS|   WS_CLIPCHILDREN);

RECT   rect;

GetClientRect(m_hWnd,&rect);
m_pViewWin-> SetWindowPosition(rect.left,   rect.top,   rect.right,   rect.bottom);
m_pViewWin-> put_Visible(OATRUE);  

//g_pVideoWindow-> put_FullScreenMode(OATRUE);
if(m_pViewWin   !=   NULL   )
m_pViewWin-> put_MessageDrain((OAHWND)m_hWnd);
m_pMediaControl-> Run();
break;
}
return   true;


}

请教:
这个程序是播放就是全屏的

我希望   avi   是多大多大,和播放多大

如果我希望是全屏,就可以播放全屏


各位大哥,可以帮我改一下,好吗?

谢谢!


[解决办法]
DX里面有代码,自己看着改,最烦这种来不来就要别人帮着改的人。

热点排行