【问题标题】:How can I set a transparent background colour for a WebBrowser in VB.Net?如何在 VB.Net 中为 WebBrowser 设置透明背景色?
【发布时间】:2013-11-22 09:24:17
【问题描述】:

我正在使用网络浏览器在 VB.Net 表单应用程序中自动从网络加载图像,但是,有一个白色背景,图像没有填满表单上的整个导航器对象.

如何在我的应用程序中为 Web 浏览器对象设置透明背景?

谢谢,
C.

【问题讨论】:

  • 你只使用浏览器浏览图片吗?
  • 是的。但是它们总是从网页加载(随着图像的变化),然后它会在网页上获取并显示第一张(也是唯一的)图像。

标签: vb.net webbrowser-control


【解决方案1】:

将表单的透明度键设置为白色。 您选择作为透明度键的颜色是透明的。整个表单上具有该颜色的任何内容都会变成透明的。由于浏览器的背景是白色的,白色的透明度键将使其透明,您可以使用 Windows Aero Glass DWM 效果获得玻璃般的透明度,但它仅适用于 Windows Vista 及以上版本,对于以前版本的 Windows,您将拥有手动绘制它是一项漫长的工作。对您来说最简单、最快捷的方法是将透明键设置为白色 :)

Me.TransparencyKey = Color.White

如果您想使用 Aero Glass DWM,请使用以下代码:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Runtime.InteropServices

Private mExtendedFrameMargins As MARGINS

Protected Overrides Sub _
OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
    'use either one
    e.Graphics.SmoothingMode = SmoothingMode.HighQuality
End Sub

Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    If IsGlassEnabled() Then
        'You should paint the extended frame black for proper composition, but I'm painting it white as you need it
        e.Graphics.FillRectangle(Brushes.White, 0, 0, Me.ClientRectangle.Width, mExtendedFrameMargins.cyTopHeight)
    End If
End Sub

Private Function IsGlassEnabled() As Boolean
    If Environment.OSVersion.Version.Major < 6 Then
        Return False
    End If

    Dim isGlassSupported As Boolean = False
    DwmIsCompositionEnabled(isGlassSupported)
    Return isGlassSupported
End Function

<DllImport("dwmapi.dll")> _
Private Shared Function DwmIsCompositionEnabled(<MarshalAs(UnmanagedType.Bool)> ByRef pfEnabled As Boolean) As Integer
End Function

<DllImport("dwmapi.dll")> _
Private Shared Function DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef pMarInset As MARGINS) As Integer
End Function


<StructLayout(LayoutKind.Sequential)> _
Private Structure MARGINS
    Public cxLeftWidth As Integer
    Public cxRightWidth As Integer
    Public cyTopHeight As Integer
    Public cyBottomHeight As Integer
End Structure



Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 If IsGlassEnabled() Then
  mExtendedFrameMargins = New MARGINS
  mExtendedFrameMargins.cyTopHeight = Me.Height 'type height here, this is going to be a number (integer)
  DwmExtendFrameIntoClientArea(Me.Handle, mExtendedFrameMargins)
 End If
End Sub

我在我正在创建的应用程序中使用了此代码

【讨论】:

  • 一个 5 字的答案?!?!由于 WebBrowser 控件没有该属性,因此窗体上的属性?或者你是什么意思?
  • 嗯,你选择的作为透明度键的颜色是透明出来的。整个表单上具有该颜色的任何内容都会变成透明的。所以浏览器的背景是白色的,所以白色的透明度键会使其透明,您可以使用 Windows Aero Glass dwm 效果来获得玻璃般的透明度,但它只适用于 Windows Vista 及以上版本,对于以前版本的 Windows,您将必须手动绘制它,这有点长。对您来说最简单、最快捷的是透明键 :)
  • 我知道(我认为你的意思)......更重要的是我暗示你应该详细说明,通过将你的评论复制/粘贴到你的答案中来轻松做到...... 5个字的答案不要获得赞成票,包含详细/格式化/示例的长答案和适当的一级裁判获得赞成票。
  • 对于更广泛的自定义,我认为你应该选择WPF而不是Windows Forms
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 2011-04-14
  • 2020-07-21
  • 2011-10-04
  • 2015-07-10
  • 2020-05-04
相关资源
最近更新 更多