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来重新绘制
形象
至于它的作用:
- 如果正在使用目标颜色键绘制视频,则会将该键的颜色绘制到目标窗口中
- 如果图像带有字母框,或者图像的一部分落在另一台显示器上,则会对图像未覆盖的部分进行喷漆