读书人

帮小弟我改改下面这段视频播放的程序

发布时间: 2012-02-22 19:36:54 作者: rapoo

求助:各位大哥帮我改改下面这段视频播放的程序,好吗?非常感谢!
//播放所有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里面有代码,自己看着改,最烦这种来不来就要别人帮着改的人。

读书人网 >C++

热点推荐