请来帮小弟我看看下面有关问题(事件),多谢
求助:请各位大哥来帮我看看下面问题(事件),谢谢!
//播放所有wave,mps,和视频文件
class CVideo
{
private:
/// direct show
IGraphBuilder* m_pGraph; // Filter对象
IMediaControl* m_pMediaControl; // 流媒体播放器
IMediaPosition* m_pMediaPosition; // 播放位置
IMediaEvent* m_pEvent; // 流媒体触发事件
IVideoWindow* m_pViewWin; // 播放视频的窗口
HWND m_hWnd; // 窗口句柄
BOOL m_isLoop; // 是否循环播放
/// direct sound
LPDIRECTSOUND8 m_pSound; // 声音硬件指针
LPDIRECTSOUNDBUFFER m_pSBuffer; // 声音缓冲
DSBUFFERDESC m_dsdesc;
public:
LRESULT AVI_WaitCompletion(long a=INFINITE)//等候响应事件,一般用于播放avi。使用时需传入一个长整形,确定播放停止的时间用毫秒表示。
{
long evCode;
if( m_pEvent )
{
m_pEvent-> WaitForCompletion(a,&evCode);
return S_OK;
}
else
{
return E_FAIL;
}
}
};
//初始化流媒体播放
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;
}
请教:
这里有几个地方不明白:
问题1:
INFINITE 这个系统定义好的,是奥妙?
问题2:
if( m_pEvent )
是什么意思?
哪个东西来响应事迹啊?
问题3:
m_pEvent 是怎么产生的?
谢谢!
------解决方案--------------------
3.HANDLE m_pEvent = CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPTSTR lpName);
INFINITE 无限长时间等待
//播放所有wave,mps,和视频文件
class CVideo
{
private:
/// direct show
IGraphBuilder* m_pGraph; // Filter对象
IMediaControl* m_pMediaControl; // 流媒体播放器
IMediaPosition* m_pMediaPosition; // 播放位置
IMediaEvent* m_pEvent; // 流媒体触发事件
IVideoWindow* m_pViewWin; // 播放视频的窗口
HWND m_hWnd; // 窗口句柄
BOOL m_isLoop; // 是否循环播放
/// direct sound
LPDIRECTSOUND8 m_pSound; // 声音硬件指针
LPDIRECTSOUNDBUFFER m_pSBuffer; // 声音缓冲
DSBUFFERDESC m_dsdesc;
public:
LRESULT AVI_WaitCompletion(long a=INFINITE)//等候响应事件,一般用于播放avi。使用时需传入一个长整形,确定播放停止的时间用毫秒表示。
{
long evCode;
if( m_pEvent )
{
m_pEvent-> WaitForCompletion(a,&evCode);
return S_OK;
}
else
{
return E_FAIL;
}
}
};
//初始化流媒体播放
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;
}
请教:
这里有几个地方不明白:
问题1:
INFINITE 这个系统定义好的,是奥妙?
问题2:
if( m_pEvent )
是什么意思?
哪个东西来响应事迹啊?
问题3:
m_pEvent 是怎么产生的?
谢谢!
------解决方案--------------------
3.HANDLE m_pEvent = CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPTSTR lpName);
INFINITE 无限长时间等待