void CPlayWndDlg::OnBnClickedBrowseButton()
{
CFileDialog dlgFile(TRUE, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Movie Files (*.avi;*.mpg;*.mpeg) |\
*.avi;*.mpg;*.mpeg |\
Audio Files (*.wav;*mp3;*.mpa;*.mpu;*.au) |\
*.wav;*.mp3;*.mpa;*.mpu;*.au |\
Midi Files (*.mid;*.midi;*.rmi) |\
*.mid;*.midi;*.rmi| | ", this);
if(dlgFile.DoModal() == IDOK)
{
m_strMediaFile = dlgFile.GetPathName();
GetDlgItem(IDC_MEDIAFILE_EDIT)->SetWindowText(m_strMediaFile);
}
else
return;
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&m_pGraph);
HRESULT hr = m_pGraph->RenderFile(CA2W(m_strMediaFile), NULL);
if(FAILED(hr))
{
char szMsg[200];
AMGetErrorText(hr, szMsg, sizeof(szMsg));
AfxMessageBox(szMsg);
}
//指定父窗体
IVideoWindow* pVidWin = NULL;
m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
pVidWin->put_Owner((OAHWND)m_hWnd);
pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
CRect rc;
GetDlgItem(IDC_VW_FRAME)->GetWindowRect(rc);
ScreenToClient(rc);
pVidWin->SetWindowPosition(rc.left, rc.top, rc.Width(), rc.Height());
// 注意此处Filter Graph Manager的事件以WM_GRAPHNOTIFY发出(用户定义的消息).
m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent);
m_pEvent->SetNotifyWindow((OAHWND)m_hWnd, WM_GRAPHNOTIFY, 0);
// 设置Seeking
m_pGraph->QueryInterface(IID_IMediaSeeking, (void **)&m_pMediaSeeking);
}
void CPlayWndDlg::OnBnClickedPlayButton()
{
Play();
}
void CPlayWndDlg::OnBnClickedPauseButton()
{
m_pMediaControl->Pause();
m_isPlaying = TRUE;
GetDlgItem(IDC_PLAY_BUTTON)->EnableWindow(TRUE);
GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(FALSE);
}
void CPlayWndDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
CleanUp();
OnCancel();
} |