防止视频透支 window 背景

Prevent video from overdrawing window background

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

RECT r;

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

m_pVideoDisplay->SetVideoPosition(NULL, &r);

这会正确地将视频放在左上角并将其缩放到 100x100 像素,但出于某种原因,Media Foundation 视频渲染器也会填充我的 window 中的所有 space,即 没有现在被黑色视频占用了。我怎样才能阻止它这样做?我已经明确告诉 IMFVideoDisplayControl 只绘制到 window 的左上角 100x100 像素。但它仍然用黑色填充了我 window 的剩余 space!我该怎么做才能让 Media Foundation 不触及我的其余部分 window?

我的 WM_PAINT 看起来像这样:

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

我希望所有未被视频占用的 window space 都是白色的,但它是黑色的。

我也试过这样做,但也没用:

m_pVideoDisplay->SetRenderingPrefs(MFVideoRenderPrefs_DoNotRenderBorder);

有什么想法吗?谢谢!

为了回答我自己的问题,这里的技巧是使用 CreateWindowEx() 简单地将 child window 添加到我的 parent window 并让媒体Foundation 通过调用 IMFVideoDisplayControlSetVideoWindow() 渲染到 child window 而不是 parent。然后就不会再透支了,一切都好了。我什至不必再使用 SetVideoPosition(),因为我可以通过在 child 上调用正常的 MoveWindow() Win32 API 来简单地移动视频(或应用缩放) window。这真的很顺利。