// IDC_VW_FRAME控件Picture Control主要作用是控制Vedio Window的显示位置
void CPlayWndDlg::MoveVideoWindow(void)
{
IVideoWindow* pVideoWinow = NULL;
if(m_pGraph)
{
m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWinow);
CRect rc;
GetDlgItem(IDC_VW_FRAME)->GetWindowRect(rc);
ScreenToClient(rc);
pVideoWinow->SetWindowPosition(rc.left, rc.top, rc.Width(), rc.Height());
pVideoWinow->Release();
pVideoWinow = NULL;
}
}
void CPlayWndDlg::CleanUp(void)
{
long levCode;
IVideoWindow *pVidWin = NULL;
if(!m_pGraph)
return;
m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
m_pEvent->WaitForCompletion(INFINITE, &levCode);
pVidWin->put_Visible(OAFALSE);
pVidWin->Release();
m_pMediaSeeking->Release();
m_pMediaControl->Release();
m_pEvent->Release();
m_pGraph->Release();
m_pMediaSeeking = NULL;
m_pMediaControl = NULL;
m_pEvent = NULL;
m_pGraph = NULL;
UpdateData(FALSE);
CClientDC dc(GetDlgItem(IDC_VW_FRAME));
dc.SetBkColor(RGB(0,0,0));
CRect rc;
GetDlgItem(IDC_VW_FRAME)->GetClientRect(rc);
ClientToScreen(rc);
dc.FillRect(rc, CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH)));
Invalidate();
}
BOOL CPlayWndDlg::Stop(void)
{
IVideoWindow *pVidWin = NULL;
HRESULT hr;
if(m_pMediaControl)
{
LONGLONG pos = 0;
hr = m_pMediaControl->Stop();
hr = m_pMediaSeeking->SetPositions(&pos, AM_SEEKING_AbsolutePositioning ,
&pos, AM_SEEKING_NoPositioning);
m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
pVidWin->put_Visible(OAFALSE);
m_isPlaying = FALSE;
GetDlgItem(IDC_PLAY_BUTTON)->EnableWindow(TRUE);
GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(FALSE);
pVidWin->Release();
long levCode;
m_pEvent->WaitForCompletion(INFINITE, &levCode);
m_pMediaControl->Release();
return TRUE;
}
return FALSE;
}
BOOL CPlayWndDlg::Play(void)
{
// 运行
IVideoWindow *pVidWin = NULL;
if(m_pGraph)
{
m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
pVidWin->put_Visible(OATRUE);
m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl);
m_pMediaControl->Run();
m_isPlaying = TRUE;
GetDlgItem(IDC_PLAY_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(TRUE);
return TRUE;
}
return FALSE;
}
本文地址:http://com.8s8s.com/it/it1022.htm