我如何得到一个透明的Windows对话框和绘制图元留在所绘制流视频窗口的顶部?

StackOverflow https://stackoverflow.com/questions/2180125

我有一个包含一个窗口已经流式视频被吸向的ActiveX控件。我有一个单独的对话框,我在另一个窗口中创建,我已透明或半透明的以各种方式(即,使用SetLayeredWindowAttributes(...)用在对话框的分层属性[用于α混合]或设定透明沿着由属性)。

此外,我试图用各种方法来试图获取窗口的对话框总是画上了流媒体视频窗口的顶部,但没有被证明对我的工作。如果我有一个按钮,在对话框上或在的LineTo透明表面上绘制(...)呼吁他们不要停留在视频的顶部。我试图使用SetWindowPos影响两个窗口的z顺序,并且还试图改变对话窗口的属性,例如“最顶层”但没有效果。

有没有人尝试为一个覆盖窗口做这样的事情在视频流和视频流之后总是画的前窗得到z排序工作?

更新:02/10/10 - 使用与SetLayeredWindowAttributes WS_EX_LAYERED属性使用LWA_COLORKEY尝试(...),取得了什么,我一直在寻找。由于分层的财产不能与WS_CHILD样式使用该解决方案与它带来的叠加窗口位置的一些所需的管理相对于视频的窗口。此外,还有我想消除一些其他古怪。例如,当与视频ActiveX控件窗口嵌入到IE标签和我切换到覆盖窗口上的另一选项卡的控制留在顶部的新标签(当使用WS_POPUP样式)。仍在调查是否会有处理这一其他然后确定开关和隐藏窗口visability的替代手段。

有帮助吗?

解决方案 2

WS_EX_LAYERED属性与SetLayeredWindowAttributes(...)使用LWA_COLORKEY的colorkey使用其中将实现透明度。 Transpaerent覆盖遗体在视频和活跃的流媒体视频的前面仍然活。 WS_CHILD风格不能与分层式的使用,因此窗口位置需要额外的管理如果使用WS_POPUP。其他问题可能无法产生有重叠的子窗口。 - 见Q更新。

其他提示

这是不可能的,大量的视频输出代码使用硬件覆盖的,所以如果你的窗口前,覆盖要么将无法正常工作,或不会画在您的像素在所有。

硬件叠加允许比当前的显示格式,这可以节省大量的CPU和存储器带宽的其他格式的视频绘图代码到本帧。

在我的经验,覆盖通常是YUV格式,而不是RGB,因为许多视频压缩格式基于YUV。所以,视频硬件从YUV图像从屏幕缓冲区得到一些像素和没有,所以,除非你让自己插入到视频流的渲染代码路径可以在不影响这些像素。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top