为什么我不能在对话框中正常显示DShow的视频?

ghostliu 2004-08-03 11:40:29
在VC的对话框中放置一个Picture标准控件(id为IDC_STATIC),如果将其设置为Frame类型,可以正常显示。但是如果将其设置为Rectangle类型播放的时候就无法看到图像,必须要在播放时移动一下对话框图像才会显示出来。
主要的在窗口中显示代码如下:
//m_pView为IVideoWindow类型的指针
CWnd* pwnd = GetDlgItem(IDC_STATIC);
RECT rect;
pwnd->GetClientRect(&rect);
m_pEvent->SetNotifyWindow((OAHWND)pwnd->GetSafeOwner()->GetSafeHwnd(), WM_GRAPHNOTIFY, 0);
m_pView->put_Owner((OAHWND)pwnd->GetSafeHwnd());
m_pView->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN );
m_pView->SetWindowPosition(rect.left, rect.top, rect.right,rect.bottom);
m_pView->put_Visible(OATRUE);//这两句加不加是一样的效果
m_pView->SetWindowForeground(OATRUE);//
m_pMediaControl->Run();
//pwnd->Invalidate();//加了这两句也没用
//pwnd->UpdateWindow();
恳请高手告诉我这是为什么?
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghostliu 2004-08-03
  • 打赏
  • 举报
回复
我觉得很奇怪啊,Dshow的例程序也都是这些代码,但是都能在rectangle里面正常显示的啊。
《DirectShow实务精选》这本书我前两天去看了,没有卖的。能不能劳烦老兄帮忙把要点写出来啊?多谢了。
happydeer 2004-08-03
  • 打赏
  • 举报
回复
简单。视频窗口刷新问题。这个问题以前有人问过了,你可以在论坛里搜一下。另外,《DirectShow实务精选》的P139-140就这个问题给出了解决方案。
ghostliu 2004-08-03
  • 打赏
  • 举报
回复
我试了一下,还是不行啊,真的搞不懂啊。
showphon 2004-08-03
  • 打赏
  • 举报
回复
我写的时候是这样的,picture的类型是rectangle,m_VideoWindow是其窗体句柄。我的程序能运行。你看看有什么不同吧,我也不知道怎么回事。
CComQIPtr< IVideoWindow, &IID_IVideoWindow > pWindow = m_pGraph;
if( !pWindow )
{
MessageBox("\n Renderʧ°Ü£¡\n","Error!",MB_OKCANCEL);
return E_FAIL;
}
RECT rc;
::GetWindowRect(m_VideoWindow, &rc );
hr = pWindow->put_Owner( (OAHWND)m_VideoWindow );
hr = pWindow->put_Left( 0 );
hr = pWindow->put_Top( 0 );
hr = pWindow->put_Width( rc.right - rc.left );
hr = pWindow->put_Height( rc.bottom - rc.top );
hr = pWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS );
hr = pWindow->put_Visible( OATRUE );

hr = AddGraphToRot(m_pGraph, &g_dwGraphRegister);

CComQIPtr< IMediaControl, &IID_IMediaControl > pControl = m_pGraph;
hr = pControl->Run( );

ghostliu 2004-08-03
  • 打赏
  • 举报
回复
而且播放的时候Picture画面会闪一下,然后就又变黑了。
ghostliu 2004-08-03
  • 打赏
  • 举报
回复
另外,如果用m_pView->put_Owner((OAHWND)pwnd->GetSafeOwner()->GetSafeHwnd());则可以在对话框上正常的播放出来,但是被这个Picture控件遮住的部分还是要拖动一下对话框才能显示。
ghostliu 2004-08-03
  • 打赏
  • 举报
回复
在ClassWizard里面不能给Picture加变量,要自己单独整吗?怎么整啊?
wangqin7927 2004-08-03
  • 打赏
  • 举报
回复
你为你的Picture标准控件设置个变量!如CStatic m_VideoWindow,再m_pView->put_Owner((OAHWND)m_VideoWindow.GetSafeHwnd());试试看!

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧