.NET中用户控件中的透明Web浏览器

时间:2009-12-17 15:06:15

标签: .net browser transparency

我有一个相当棘手的问题(至少对我而言),我花了很多时间试图找出答案。我有一个C#winform应用程序。在应用程序中,我需要以透明的颜色呈现多个网页,允许我将网页堆叠在彼此之上。我可以通过让网页没有指定背面颜色然后将WebBrowser控件放在一个单独的WinForm上,并将TransparentcyKey和BackgroundColor设置为例如白色。当我打开多个表单时,它们会表现得透明,并且我得到了所需的效果。

在我看来,拥有大量开放的形式非常混乱,因为我想要的是更像控制的东西。因此,我的想法是将其放入UserControl并在其中添加必要的逻辑,或者只是在Webbrowser中继承和覆盖功能。然而,UserControl不会像表单那样暴露任何透明度键,所以最初这是一个死胡同。覆盖UserControl中的WndProc以自己处理绘制似乎没有任何效果。这就像WebBrowser对任何东西都不是真正可访问的,我猜这与它只是被包装的ActiveX这一事实有关。

如果不可能有一个派生的WeBrowser或带有WebBrowser的UserControl,那么任何人都有任何关于如何以一种方式处理表单的建议,以便它们在放置它们时就像用户控件那样起作用在“母亲”形式之上?

最好的衣衫褴褛    Franz Thomsen

1 个答案:

答案 0 :(得分:4)

webbrowser控件使用“Internet选项”中指定的背景颜色擦除其背景。要将其与另一个窗口的图像混合,您需要使用图层(SetLayeredWindowAttributes / UpdateLayeredWindow)。

但是,图层不适用于子窗口(在本例中为WebBrowser控件)。要使其成为另一个图层,您需要创建一个拥有的顶级窗口,该窗口位于主窗口上占位符控件上方的同一位置。随着占位符控件的移动/调整大小,您将不得不继续移动它并可能调整大小。拥有一个所有者将确保它被应用程序的主窗口自动最小化和销毁。而且你需要使它看起来像一个子窗口,即无边框和ShowInTaskbar = false。

请参阅http://blogs.msdn.com/changov/archive/2009/01/19/webbrowser-control-on-transparent-wpf-window.aspx进行讨论。

如果您的网页包含直接写入屏幕的硬件加速的ActiveX / DirectX过渡和过滤器,而不是参与IE窗口绘制过程,那么您可能会运气不佳。