是否可以使用半透明且完全透明的Windows表单?

时间:2016-04-09 22:40:23

标签: vb6

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

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

1 个答案:

答案 0 :(得分:1)

如果是VB 6,请查看this thread from 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