微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

防止视频覆盖窗口背景

如何解决防止视频覆盖窗口背景

我有一个640x480大小的窗口。我想在该窗口的左上角放置一个100x100大小的视频。所以我这样做:

RECT r;

r.left = 0;
r.top = 0;
r.right = 100;
r.bottom = 100;

m_pVideodisplay->SetVideoPosition(NULL,&r);

这可以正确地将视频放置在左上角,并将其缩放为100x100像素,但是由于某些原因,Media Foundation视频渲染器也会填充窗口中占用的所有空间黑色视频。我该如何阻止它呢?我已经明确告诉IMFVideodisplayControl仅绘制窗口左上角100x100像素。但是它仍然用黑色填充了我窗口的剩余空间!我该怎么做才能使Media Foundation不会碰到窗口的其余部分?

我的WM_PAINT看起来像这样:

GetClientRect(hwnd,&rc);
BeginPaint(hwnd,&ps);      
FillRect(ps.hdc,&rc,GetStockObject(WHITE_Brush));         
m_pVideodisplay->RepaintVideo();
EndPaint(hwnd,&ps); 

我希望视频没有占用的所有窗口空间都是白色,而是黑色。

我也曾尝试这样做,但这也无济于事:

m_pVideodisplay->SetRenderingPrefs(MFVideoRenderPrefs_DoNotRenderBorder);

有什么想法吗?谢谢!

解决方法

要回答我自己的问题,这里的技巧是使用CreateWindowEx()简单地将子窗口添加到父窗口中,并通过调用SetVideoWindow()使Media Foundation渲染到子窗口而不是父窗口中。 IMFVideoDisplayControl。这样就不会再透支了,一切都很好。我什至不必再使用SetVideoPosition(),因为我可以通过在子窗口上调用普通的MoveWindow() Win32 API来移动视频(或应用缩放)。这确实非常顺利。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。