防止视频透支 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 通过调用 IMFVideoDisplayControl
的 SetVideoWindow()
渲染到 child window 而不是 parent。然后就不会再透支了,一切都好了。我什至不必再使用 SetVideoPosition()
,因为我可以通过在 child 上调用正常的 MoveWindow()
Win32 API 来简单地移动视频(或应用缩放) window。这真的很顺利。
我有一个 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 通过调用 IMFVideoDisplayControl
的 SetVideoWindow()
渲染到 child window 而不是 parent。然后就不会再透支了,一切都好了。我什至不必再使用 SetVideoPosition()
,因为我可以通过在 child 上调用正常的 MoveWindow()
Win32 API 来简单地移动视频(或应用缩放) window。这真的很顺利。