Warum müssen Fenster immer rechteckig sein ?

Leserbewertung(3):bewerten...
kommentieren...

Hans Happel

Die API-Funktion SetWindowRgn ermöglicht auch andere Formen.
Erstellen Sie eine Region mit CreatePolygonRgn oder CreateRoundRectRgn und binden Sie diese in SetWindowRgn ein. Mit der API-Funktion CombineRgn können Sie mehrere Regionen zu einer Region vereinen. Sie erhalten die tollsten Effekte. Experimentiere Sie ein wenig.
Übrigens: Nicht nur Formen sondern auch Steuerelemente mit eigenem hWnd lassen sich verändern.

Kopieren Sie den nachstehenden Code in den Deklarationsabschnitt Ihrer Form

Option Explicit
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Dim Region As Long

Kopieren Sie den nachstehenden Code in den Form_Resize-Abschnitt Ihrer Form

Private Sub Form_Resize()
Dim Breite As Long, Höhe As Long
Dim P(5) As POINTAPI

Breite = Me.Width / Screen.TwipsPerPixelX
Höhe = Me.Height / Screen.TwipsPerPixelY
Region = CreateRoundRectRgn(0, 0, Breite, Höhe, Breite, Höhe)

'P(0).x = Breite \ 2: P(0).y = 0
'P(1).x = Breite: P(1).y = 0
'P(2).x = Breite: P(2).y = Höhe \ 2
'P(3).x = Breite \ 2: P(3).y = Höhe
'P(4).x = 0: P(4).y = Höhe
'P(5).x = 0: P(5).y = Höhe \ 2
'Region = CreatePolygonRgn(P(0), 6, 0)

SetWindowRgn Me.hWnd, Region, True

End Sub

Kopieren Sie den nachstehenden Code in den Form_Unload-Abschnitt Ihrer Form

Private Sub Form_Unload(Cancel As Integer)
DeleteObject Region
End Sub