동영상 프로그램 제작 시 새창을 띄우지 않고 동영상이 플레이되길 원한다면 IVideoWindow 인터페이스를 이용하여 비디오 재생 윈도우를 동영상 프로그램에 붙여야 합니다. IVideoWindow를 설정하지 않을 경우 기본적으로 새 창에서 동영상이 플레이 됩니다.
밑에는 간단한 사용 방법 입니다.
public partial class Form1 : Form
{
IGraphBuilder pGraph = null;
IMediaControl pControl = null;
//IMediaEvent pEvent = null;
IVideoWindow videoWindow = null;
private string strTitle = ""; //파일 대화상자의 제목표시줄에 표시될 문자열.
private string strTitleTmp = ""; //임시 제목표시줄 저장 변수.
private string strFilePath = ""; //선택한 파일 경로.
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnList_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "미디어 파일(avi, wmv)|*.avi;*.wmv|All Files|*.*";
if (DialogResult.OK == openFile.ShowDialog())
{
strFilePath = openFile.FileName;
strTitleTmp = strFilePath;
int titleIndex = strTitleTmp.LastIndexOf("\\");
strTitle = strTitleTmp.Substring(titleIndex + 1);
this.Text = strTitle;
}
}
private void btnPlay_Click(object sender, EventArgs e)
{
pGraph = (IGraphBuilder)new FilterGraph();
pControl = (IMediaControl)pGraph;
videoWindow = (IVideoWindow)pGraph;
pGraph.RenderFile(strFilePath, "");
//붙이고자 하는 부모 윈도우의 핸들을 받습니다.
this.videoWindow.put_Owner(this.Handle);
//비디오 윈도우의 스타일을 자식 윈도우로 변경합니다.
this.videoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipChildren);
//비디오 윈도우가 재생될 위치를 지정합니다.
this.videoWindow.SetWindowPosition(this.panel1.Left, this.panel1.Top, this.panel1.Width, this.panel1.Height);
//비디오 윈도우가 표시되도록 설정합니다.
this.videoWindow.put_Visible(OABool.True);
pControl.Run();
}
private void btnStop_Click(object sender, EventArgs e)
{
pControl.Stop();
}
}