void CNewAviTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
IGraphBuilder *m_pGraph;
IMediaControl *m_pControl;
IMediaEventEx *m_pEvent;
IVideoWindow *m_pVideoWindow;
CoInitialize(NULL); HWND hWnd;
hWnd = GetDlgItem(IDC_STATIC_MPEG)->m_hWnd; HRESULT hr; //free(); //Deletes any previous DirectShow instances
hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGraph);
if (!SUCCEEDED(hr))
{
MessageBox(_T("CoCreateInstance failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaControl failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaEventEx failed"));
} hr = m_pEvent->SetNotifyWindow((OAHWND)hWnd, 0, 0);
if (!SUCCEEDED(hr))
{
MessageBox(_T("SetNotifyWindow failed"));
}
hr = m_pGraph->RenderFile(_T("C\\爱我别走.avi"), NULL);
if (!SUCCEEDED(hr))
{
MessageBox(_T("RenderFile failed"));
//m_pMediaPlayerLog->WriteOut("RenderFile failed,RESULT:0x%x",hr);
}
hr = m_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVideoWindow);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IVideoWindow failed"));
} SetWindowLong(hWnd,GWL_STYLE,GetWindowStyle(hWnd) |WS_CLIPCHILDREN);
hr = m_pVideoWindow->put_Owner((OAHWND)hWnd);// 这里报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_Owner failed"));
}
hr = m_pVideoWindow->put_WindowStyle(WS_CHILD |WS_CLIPCHILDREN |WS_CLIPSIBLINGS); //然后这里也会报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_WindowStyle failed"));
//m_pMediaPlayerLog->WriteOut("put_WindowStyle failed,RESULT:0x%x",hr);
}
hr = m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);//然后这里也会报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_MessageDrain failed"));
//m_pMediaPlayerLog->WriteOut("put_MessageDrain failed,RESULT:0x%x",hr);
}
hr = m_pVideoWindow->put_Visible(OATRUE); //最后是这里也会报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_Visible failed"));
//m_pMediaPlayerLog->WriteOut("put_Visible failed,RESULT:0x%x",hr);
} RECT grc;
GetClientRect(&grc);
m_pVideoWindow->SetWindowPosition(289,81,704,585);
m_pVideoWindow->put_Visible(OATRUE); m_pControl->Run(); }
哪位大侠能告诉我,我的m_pVideoWindow->put_Owner((OAHWND)hWnd),
m_pVideoWindow->put_WindowStyle(WS_CHILD |WS_CLIPCHILDREN |WS_CLIPSIBLINGS);
m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);
m_pVideoWindow->put_Visible(OATRUE);
都错在哪里?谢谢!!!
{
// TODO: Add your control notification handler code here
IGraphBuilder *m_pGraph;
IMediaControl *m_pControl;
IMediaEventEx *m_pEvent;
IVideoWindow *m_pVideoWindow;
CoInitialize(NULL); HWND hWnd;
hWnd = GetDlgItem(IDC_STATIC_MPEG)->m_hWnd; HRESULT hr; //free(); //Deletes any previous DirectShow instances
hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGraph);
if (!SUCCEEDED(hr))
{
MessageBox(_T("CoCreateInstance failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaControl failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaEventEx failed"));
} hr = m_pEvent->SetNotifyWindow((OAHWND)hWnd, 0, 0);
if (!SUCCEEDED(hr))
{
MessageBox(_T("SetNotifyWindow failed"));
}
hr = m_pGraph->RenderFile(_T("C\\爱我别走.avi"), NULL);
if (!SUCCEEDED(hr))
{
MessageBox(_T("RenderFile failed"));
//m_pMediaPlayerLog->WriteOut("RenderFile failed,RESULT:0x%x",hr);
}
hr = m_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVideoWindow);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IVideoWindow failed"));
} SetWindowLong(hWnd,GWL_STYLE,GetWindowStyle(hWnd) |WS_CLIPCHILDREN);
hr = m_pVideoWindow->put_Owner((OAHWND)hWnd);// 这里报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_Owner failed"));
}
hr = m_pVideoWindow->put_WindowStyle(WS_CHILD |WS_CLIPCHILDREN |WS_CLIPSIBLINGS); //然后这里也会报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_WindowStyle failed"));
//m_pMediaPlayerLog->WriteOut("put_WindowStyle failed,RESULT:0x%x",hr);
}
hr = m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);//然后这里也会报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_MessageDrain failed"));
//m_pMediaPlayerLog->WriteOut("put_MessageDrain failed,RESULT:0x%x",hr);
}
hr = m_pVideoWindow->put_Visible(OATRUE); //最后是这里也会报错
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_Visible failed"));
//m_pMediaPlayerLog->WriteOut("put_Visible failed,RESULT:0x%x",hr);
} RECT grc;
GetClientRect(&grc);
m_pVideoWindow->SetWindowPosition(289,81,704,585);
m_pVideoWindow->put_Visible(OATRUE); m_pControl->Run(); }
哪位大侠能告诉我,我的m_pVideoWindow->put_Owner((OAHWND)hWnd),
m_pVideoWindow->put_WindowStyle(WS_CHILD |WS_CLIPCHILDREN |WS_CLIPSIBLINGS);
m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);
m_pVideoWindow->put_Visible(OATRUE);
都错在哪里?谢谢!!!
解决方案 »
- 位图打包问题
- 如何在主程序 和 dll之间 进行回调?变量和函数指针的回调方法有区别吗?另外,如果在dll里开辟了内存,在主程序里可以去用吗?如何用
- 如何利用创建线程进行消息查询
- 怎么封装一个CDialog,封装CXXXDialog后,我新建对话框资源后,基类用封装过的CXXXDialog,用于实现对话框的重绘,而不是在每个对话框中绘.
- 请问关于dxf格式中椭圆弧的后两个参数与起始角终止角的关系
- 有没有学习网络编程的专门的网站,系统点的
- 怎样将一个位图背景透明的画到标题栏.急!!
- 如何给本地所有的UDP端口发一个广播包?
- 有哪位大哥帮我解决一下我的问题,好急呀!!特别感谢!!希望能留下QQ!
- 高分大放送---那里有DBLibrary的中文资料。
- DLL中如何使用窗体中的BUTTON控件 在先等
- ADO 如何得到集合中对象的数目?
hr = m_pVideoWindow->put_Owner((OAHWND)hWnd);//
if (!SUCCEEDED(hr))
{
strError.Format(_T("put_Owner出错:%d"),GetLastError());
MessageBox(strError);
}
hr = m_pVideoWindow->put_WindowStyle(WS_CHILD ¦WS_CLIPCHILDREN ¦WS_CLIPSIBLINGS);
if (!SUCCEEDED(hr))
{
//MessageBox(_T("put_WindowStyle failed"));
strError.Format(_T("put_WindowStyle出错:%d"),GetLastError());
MessageBox(strError);
}
hr = m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);//将所有消息传给父窗体处理
if (!SUCCEEDED(hr))
{
//MessageBox(_T("put_MessageDrain failed"));
strError.Format(_T("put_MessageDrain出错:%d"),GetLastError());
MessageBox(strError);
}
hr = m_pVideoWindow->put_Visible(OATRUE);
if (!SUCCEEDED(hr))
{
//MessageBox(_T("put_Visible failed"));
strError.Format(_T("put_Visible出错:%d"),GetLastError());
MessageBox(strError);
} RECT grc;
GetClientRect(&grc);
m_pVideoWindow->SetWindowPosition(289,81,704,585);
m_pVideoWindow->put_Visible(OATRUE); m_pControl->Run(); 输出的错误信息为:
put_Owner出错: 0
put_WindowStyle出错: 6
put_MessageDrain出错:6
put_Visible出错: 6
希望知道的大侠多多指教,非常感谢!谢谢!!!
{
// TODO: Add your control notification handler code here
IGraphBuilder *m_pGraph;
IMediaControl *m_pControl;
IMediaEventEx *m_pEvent;
IVideoWindow *m_pVideoWindow;
CoInitialize(NULL); HWND hWnd = GetSafeHwnd(); HRESULT hr; //free(); //Deletes any previous DirectShow instances
hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGraph);
if (!SUCCEEDED(hr))
{
MessageBox(_T("CoCreateInstance failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaControl failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaEventEx failed"));
} hr = m_pEvent->SetNotifyWindow((OAHWND)hWnd, 0, 0);
if (!SUCCEEDED(hr))
{
MessageBox(_T("SetNotifyWindow failed"));
}
hr = m_pGraph->RenderFile(_T("C\\爱我别走.avi"), NULL);
if (!SUCCEEDED(hr))
{
MessageBox(_T("RenderFile failed"));
//m_pMediaPlayerLog->WriteOut("RenderFile failed,RESULT:0x%x",hr);
}
hr = m_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVideoWindow);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IVideoWindow failed"));
} SetWindowLong(hWnd,GWL_STYLE,GetWindowStyle(hWnd) ¦WS_CLIPCHILDREN);
hr = pVidWin->put_Owner((OAHWND)hwnd);
CString strError;
if (!SUCCEEDED(hr))
{
strError.Format(_T("put_Owner出错:%x"),hr); //这里开始报错!!!
MessageBox(strError);
strError.Format(_T("put_Owner出错:%d"),hr);
MessageBox(strError);
strError.Format(hr);
MessageBox(strError);
}
hr = m_pVideoWindow->put_WindowStyle(WS_CHILD ¦WS_CLIPCHILDREN ¦WS_CLIPSIBLINGS); //然后这里也会报错 ,失败了
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_WindowStyle failed"));
//m_pMediaPlayerLog->WriteOut("put_WindowStyle failed,RESULT:0x%x",hr);
}
hr = m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);//然后这里也会报错 ,失败了
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_MessageDrain failed"));
//m_pMediaPlayerLog->WriteOut("put_MessageDrain failed,RESULT:0x%x",hr);
}
hr = m_pVideoWindow->put_Visible(OATRUE); //最后是这里也会报错 ,失败了
if (!SUCCEEDED(hr))
{
MessageBox(_T("put_Visible failed"));
//m_pMediaPlayerLog->WriteOut("put_Visible failed,RESULT:0x%x",hr);
} RECT grc;
GetClientRect(&grc);
m_pVideoWindow->SetWindowPosition(289,81,704,585);
m_pVideoWindow->put_Visible(OATRUE); m_pControl->Run(); }
察看输出结果:
第一个对话框显示:put_Owner出错:80004002
第二个对话框显示:put_Owner出错:-2147467262
第三个对话框是空白 我想创建一个视频窗口,播放MP4。谁能告诉我put_Owner()里面的参数应该怎么得到才不会出现那样的错误阿?谢谢大家!
m_pVideoWindow ,没有赋值(QueryInterface(....,&m_pVideoWindow);
所以错了到了3楼貌似对了,在我机器上没有问题
,不过我把
hr = m_pGraph->RenderFile(_T("C\\爱我别走.avi"), NULL);
改成了
hr = m_pGraph->RenderFile(L"C\\爱我别走.avi", NULL);
谢谢,总算有人回我了。
可是我不知道你为什么可以用。而在我的机器上显示:
put_Owner出错: 0
put_WindowStyle出错: 6
put_MessageDrain出错:6
put_Visible出错: 6
天啊!为什么啊?难道是我的板子有问题?谁能帮忙指点一下啊?
put_WindowStyle出错: 6
put_MessageDrain出错:6
put_Visible出错: 6
是用一楼的代码产生的,“put_Owner出错: 0 ”说明没有错误。可是还是没有图像,说明还是有错误。其实最关键的应该还是三楼代码的错误信息:
第一个对话框显示:put_Owner出错:80004002
第二个对话框显示:put_Owner出错:-2147467262
第三个对话框是空白
接着就是几声“咔”,没有图像。不知道为什么。
hr = pVidWin->put_Owner((OAHWND)hwnd);
//我想你这里是不是贴错了,pVidWin哪来的,应该是m_pVideoWindow 吧把
hr = m_pGraph->RenderFile(_T("C\\爱我别走.avi"), NULL);
改成
hr = m_pGraph->RenderFile(L"C\\爱我别走.avi", NULL);
还有,把m_pVideoWindow->SetWindowPosition(289,81,704,585); 这句也注释掉试试另外HWND hWnd = GetSafeHwnd();获得的句柄是整个对话框的,注意显示的时候不要把其它按钮覆盖住
不好意思,三楼的代码是应该是hr = m_pVideoWindow->put_Owner((OAHWND)hwnd);
我现在把hr = m_pGraph->RenderFile(_T("C\\爱我别走.avi"), NULL); 改成 hr = m_pGraph->RenderFile(L"C\\爱我别走.avi", NULL);了
把m_pVideoWindow->SetWindowPosition(289,81,704,585); 这句也注释掉了。
至于,HWND hWnd = GetSafeHwnd();获得的句柄是整个对话框的,对于目前的我来说最重要的是把图像放出来,会不会把其他按钮覆盖掉以后再考虑吧。目前的我还是先把图像放出来再说。
可现在的结果还是还是接着就是几声“咔”,没有图像。
void CNewAviTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here IGraphBuilder *m_pGraph;
IMediaControl *m_pControl;
IMediaEventEx *m_pEvent;
IVideoWindow *m_pVideoWindow;
CoInitialize(NULL); HWND hWnd;
hWnd = GetDlgItem(IDC_STATIC_MPEG)->m_hWnd; HRESULT hr;
CString strError; //free(); //Deletes any previous DirectShow instances
hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGraph);
if (!SUCCEEDED(hr))
{
MessageBox(_T("CoCreateInstance failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaControl failed"));
}
hr = m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IMediaEventEx failed"));
} hr = m_pEvent->SetNotifyWindow((OAHWND)hWnd, 0, 0);
if (!SUCCEEDED(hr))
{
MessageBox(_T("SetNotifyWindow failed"));
}
hr = m_pGraph->RenderFile(L"C\\这就是爱.avi", NULL);
if (!SUCCEEDED(hr))
{
MessageBox(_T("RenderFile failed"));
//m_pMediaPlayerLog->WriteOut("RenderFile failed,RESULT:0x%x",hr);
}
hr = m_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVideoWindow);
if (!SUCCEEDED(hr))
{
MessageBox(_T("IID_IVideoWindow failed"));
} /* SetWindowLong(hWnd,GWL_STYLE,GetWindowStyle(hWnd) |WS_CLIPCHILDREN); hr = m_pVideoWindow->put_Owner((OAHWND)hWnd);//
if (!SUCCEEDED(hr))
{
strError.Format(_T("put_Owner出错:%d"),GetLastError());
MessageBox(strError);
} */
SetWindowLong(hWnd,GWL_STYLE,GetWindowStyle(hWnd) |WS_CLIPCHILDREN);
hr = m_pVideoWindow->put_Owner((OAHWND)hWnd);
if (!SUCCEEDED(hr))
{
strError.Format(_T("put_Owner出错:%x"),hr); //这里开始报错!!!
MessageBox(strError);
strError.Format(_T("put_Owner出错:%d"),hr);
MessageBox(strError);
strError.Format(hr);
MessageBox(strError);
} hr = m_pVideoWindow->put_WindowStyle(WS_CHILD |WS_CLIPCHILDREN |WS_CLIPSIBLINGS);
if (!SUCCEEDED(hr))
{
//MessageBox(_T("put_WindowStyle failed")); strError.Format(_T("put_WindowStyle出错:%d"),GetLastError());
MessageBox(strError);
}
hr = m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);//将所有消息传给父窗体处理
if (!SUCCEEDED(hr))
{
//MessageBox(_T("put_MessageDrain failed"));
strError.Format(_T("put_MessageDrain出错:%d"),GetLastError());
MessageBox(strError);
}
hr = m_pVideoWindow->put_Visible(OATRUE);
if (!SUCCEEDED(hr))
{
//MessageBox(_T("put_Visible failed"));
strError.Format(_T("put_Visible出错:%d"),GetLastError());
MessageBox(strError);
} RECT grc;
GetClientRect(&grc);
// m_pVideoWindow->SetWindowPosition(289,81,704,585);
m_pVideoWindow->put_Visible(OATRUE); m_pControl->Run(); }现在的错误:
第一个对话框显示:put_Owner出错:80004002
第二个对话框显示:put_Owner出错:-2147467262
第三个对话框是空白
接下去:
put_WindowStyle出错: 6
put_MessageDrain出错:6
put_Visible出错: 6
请知道会做的大侠帮帮忙!谢谢!
HWND hWnd;
hWnd = GetDlgItem(IDC_STATIC_MPEG)->m_hWnd; //IDC_STATIC_MPEG是我在对话框上的一个PictureBox控件的ID
我用HWND hWnd = GetSafeHwnd(); 将它代替,用当前整个对话框作为句柄结果也一样没有图像,只有“咔”几声。
请各位大侠多帮帮忙!小弟感激不尽!!!
C\\爱我别走.avi ====》C:\\爱我别走.avi
不行的,我改成C:\\爱我别走.avi之后就显示“RenderFile failed”了。说明路径不对。
请问,你确定你那里可以播放,而且有图像的吗?
谢谢!!!
我的机器在C盘下当然没有这个文件了,我用自己别的盘的文件代替,可以运行。
提示"RenderFile failed" 倒是好事,可能是你的系统本身没有支持播放该文件的解码器,
你可以试着用这个文件拖到graphedt.exe里看看效果。
可是我用“HBITMAP hbitmap=(HBITMAP)SHLoadDIBitmap(_T("C\\Maps\\MAP.bmp"));”载入图片,或者播放MP3的时候“pGraph->RenderFile(_T("C\\不要说爱我.mp3"), NULL); ”路径都是这么写的,都对的。所以路径应该是对的。希望高手再指点一下,到底是哪里的问题。谢谢!!!