using QuartzTypeLib;
private void PlayMovie(string filename)
{
CleanUp();
Point pt = new Point(100,100);
//pictureBG.Hide(); m_objFilterGraph = new FilgraphManager();
m_objFilterGraph.RenderFile(filename);
try
{
m_objBasicAudio = m_objFilterGraph as IBasicAudio;
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}

try
{
m_objVideoWindow = m_objFilterGraph as IVideoWindow;
m_objVideoWindow.Owner = (int)panelPlay.Handle;
m_objVideoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;
m_objVideoWindow.SetWindowPosition(panelPlay.ClientRectangle.Left,
panelPlay.ClientRectangle.Top,
panelPlay.ClientRectangle.Width,
panelPlay.ClientRectangle.Height);
}
catch(Exception)
{
m_objVideoWindow = null;
} m_objMediaEvent = m_objFilterGraph as IMediaEvent; m_objMediaEventEx = m_objFilterGraph as IMediaEventEx;
m_objMediaEventEx.SetNotifyWindow((int)this.Handle,WM_GRAPHNOTIFY,0); m_objMediaPosition = m_objFilterGraph as IMediaPosition; m_objMediaControl = m_objFilterGraph as IMediaControl; m_objMediaControl.Run(); m_CurrentStatus = mediaStatus.running;
updateSelect();
}

解决方案 »

  1.   

    CleanUp()做一些清空操作!
    updateSelect()更新几个按纽的状态(enable状态)
      

  2.   

    m_objVideoWindow.Owner = (int)panelPlay.Handle;    
    m_objVideoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;
    m_objMediaEvent = m_objFilterGraph as IMediaEvent;
    m_objMediaEventEx = m_objFilterGraph as IMediaEventEx;
    m_objMediaEventEx.SetNotifyWindow((int)this.Handle,WM_GRAPHNOTIFY,0);
    m_objMediaPosition = m_objFilterGraph as IMediaPosition;
    主要询问 这几句的意思!
      

  3.   

    m_objVideoWindow = m_objFilterGraph as IVideoWindow;
    m_objVideoWindow.Owner = (int)panelPlay.Handle;
    m_objVideoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;WS_CHILD 和 WS_CLIPCHILDREN 怎么定义的?我怎么调试报错:名称“WS_CHILD”在类或命名空间“WindowsApplication1.frmPlayMedia”中不存在
      

  4.   

    http://www.codeproject.com/cs/media/directshownet.asp