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