2016-04-09 6 views
1

Ich möchte eine Form haben, die halbtransparent ist, aber einen Abschnitt hat, dass mehr transparent (oder vollständig transparent, dh „unsichtbar“)Ist es möglich, ein Windows-Formular zu haben, das sowohl halbtransparent als auch vollständig transparent ist?

Also, in der Mitte eine halb transparente Form mit einem Rechteck vorstellen das ist völlig transparent (ein bisschen wie Donut)

+0

VB6 hat:

Der Einfachheit halber habe ich den Code hier eingefügt "Thunder Forms". Das "Windows Form" -Ding ist ein .Net-GUI-Widget-Framework. Fragen Sie nach VB6 oder .Net hier? – Bob77

Antwort

1

Wenn es VB 6 ist, werfen Sie einfach einen Blick auf 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 
+0

FYI, es gibt einen Fehler in diesem Code: border_width = (Breite - ScaleWidth)/2 title_height = hgt - border_width - ScaleHeight. Konvertieren Sie die Skalierungsbreite und * Höhe zu Pixeln. –

+0

border_width = (wid - frm.ScaleX (frm.ScaleWidth, vbTwips, vbPixels))/2 title_height = hgt - border_breite - frm.ScaleY (frm.ScaleHeight, vbTwips, vbPixels) –