C# 为什么要使用DirectShow(.NET)重新绘制无窗口控件?

C# 为什么要使用DirectShow(.NET)重新绘制无窗口控件?,c#,winapi,video,directshow,directshow.net,C#,Winapi,Video,Directshow,Directshow.net,我正在使用IVMRWindowlessControl9播放视频,即WindowlessControlw/VMR-9。当我刚开始设置视频时,我注意到许多在线示例在窗口的绘制处理程序中都有这段代码: IntPtr hdc = e.Graphics.GetHdc(); int hr = 0; hr = windowlessCtrl.RepaintVideo(this.Handle, hdc); e.Graphics.ReleaseHdc(hdc); 我的视频播放正确,但我没有上述代码。上面的代码是做

我正在使用
IVMRWindowlessControl9
播放视频,即
WindowlessControl
w/
VMR-9
。当我刚开始设置视频时,我注意到许多在线示例在窗口的绘制处理程序中都有这段代码:

IntPtr hdc = e.Graphics.GetHdc();
int hr = 0;
hr = windowlessCtrl.RepaintVideo(this.Handle, hdc);
e.Graphics.ReleaseHdc(hdc);

我的视频播放正确,但我没有上述代码。上面的代码是做什么的?使用它有什么意义吗?

在大多数情况下,您不需要显式地重新绘制视频,因为视频渲染器会自动重新绘制视频。是的,如果托管窗口出于任何原因需要请求强制重画,例如作为
WM_PAINT
窗口消息处理程序的一部分,那么
repaitvideo
方法将为您服务

有关MSDN的更多信息,请参阅:

在回放期间,应用程序应通知VMR 以下Windows消息:

WM_PAINT:调用IVMRWindowlessControl::RepainVideo来重新绘制 形象

至于它的作用:

  • 如果正在使用目标颜色键绘制视频,则会将该键的颜色绘制到目标窗口中

  • 如果图像带有字母框,或者图像的一部分落在另一台显示器上,则会对图像未覆盖的部分进行喷漆

因此,如果根本不这样做,如果这些都不适用,你可能看不到任何区别