是否可以有一个既半透明又完全透明的Windows窗体



我想要一个半透明的表单,但有一个更透明(或完全透明,即"不可见")的部分

因此,想象一个半透明的形状,中间有一个完全透明的矩形(有点像甜甜圈)

如果是VB6,只需看看VBForums中的这个线程。

为了方便起见,我把代码粘贴在这里:

Option Explicit
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Sub Form_Resize()
 Const RGN_DIFF = 4
 Dim outer_rgn As Long
 Dim inner_rgn As Long
 Dim combined_rgn As Long
 Dim wid As Single
 Dim hgt As Single
 Dim border_width As Single
 Dim title_height As Single
If WindowState = vbMinimized Then Exit Sub
' Create the regions.
wid = ScaleX(Width, vbTwips, vbPixels)
hgt = ScaleY(Height, vbTwips, vbPixels)
outer_rgn = CreateRectRgn(0, 0, wid, hgt)
border_width = (wid - ScaleWidth) / 2
title_height = hgt - border_width - ScaleHeight
inner_rgn = CreateRectRgn( _
    wid * 0.25, hgt * 0.25, _
    wid * 0.75, hgt * 0.75)
' Subtract the inner region from the outer.
combined_rgn = CreateRectRgn(0, 0, 0, 0)
CombineRgn combined_rgn, outer_rgn, _
    inner_rgn, RGN_DIFF
' Restrict the window to the region.
SetWindowRgn hWnd, combined_rgn, True
DeleteObject combined_rgn
DeleteObject inner_rgn
DeleteObject outer_rgn
End Sub