Rubrik: Grafik & Zeichnen | 22.03.05 |
CombineRgn-Funktion Diese Funktion kombiniert zwei Regionen zu ändert einer dritten. | ||
Betriebssystem: Win95, Win98, WinNT 3.1, Win2000, WinME | Views: 8.903 |
Deklaration:
Declare Function CombineRgn Lib "gdi32.dll" ( _ ByVal hDestRgn As Long, _ ByVal hSrcRgn1 As Long, _ ByVal hSrcRgn2 As Long, _ ByVal nCombineMode As Long) As Long
Beschreibung:
Diese Funktion kombiniert zwei Regionen zu ändert einer dritten.
Parameter:
hDestRgn | Erwartet das Handle einer Region in dem das Ergebnis der Kombination geändert wird. |
hSrcRgn1 | Erwartet das Handle einer der Regionen diekombiniert werden sollen. |
hSrcRgn2 | Erwartet das Handle einer der Regionen diekombiniert werden sollen. |
nCombineMode | Erwartet eine der "nCombineMode"-Konstantendie die Kombinationsart beschreibt. |
nCombineMode Konstanten:
Const RGN_AND = 1 ' Die kombinierte Region soll eine überlappende Region der beiden Quellregionen sein Const RGN_OR = 2 ' Die kombinierte Region soll der Gesamtbereich der beiden Regionen inklusive überlappendem Bereich sein Const RGN_XOR = 3 ' Die kombinierte Region soll der Gesamtbereich der beiden Regionen exklusive überlappendem Bereich sein Const RGN_DIFF = 4 ' Die kombinierte Region soll der Gesamtbereich der hSrcRgn1 sein, inklusive des Bereiches der Region die von hSrcRgn2 überlappt wird Const RGN_COPY = 5 ' Die kombinierte Region soll der Gesamtbereich der hSrcRgn2 sein, inklusive des Bereiches der Region die von hSrcRgn1 überlappt wird
Rückgabewert:
Ist die Funktion erfolgreich, gibt sie eine der Rückgabe-Konstanten zurück, die beschreibtob und wie die kombinierte Region erstellt wurde.
Rückgabekonstanten:
Const ERROR = 0 ' Ein Fehler ist aufgetreten Const NULLREGION = 1 ' Die kombinierte Region ist leer Const SIMPLEREGION = 2 ' Die kombinierte Region ist eine rechteckige (simple) Region Const COMPLEXREGION = 3 ' Die kombinierte Region ist eine komplexe Region
Beispiel:
Private Declare Function CreateEllipticRgn Lib "gdi32.dll" ( _ ByVal X1 As Long, _ ByVal Y1 As Long, _ ByVal X2 As Long, _ ByVal Y2 As Long) As Long Private Declare Function DeleteObject Lib "gdi32.dll" ( _ ByVal hObject As Long) As Long Private Declare Function CreateRectRgn Lib "gdi32.dll" ( _ 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 FrameRgn Lib "gdi32.dll" ( _ ByVal hdc As Long, _ ByVal hRgn As Long, _ ByVal hBrush As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long) As Long Private Declare Function CreateHatchBrush Lib "gdi32.dll" ( _ ByVal nIndex As Long, _ ByVal crColor As Long) As Long Private Declare Function FillRgn Lib "gdi32.dll" ( _ ByVal hdc As Long, _ ByVal hRgn As Long, _ ByVal hBrush As Long) As Long Private Declare Function InvertRgn Lib "gdi32.dll" ( _ ByVal hdc As Long, _ ByVal hRgn As Long) As Long ' CombineRgn nCombineMode-Konstanten Private Const RGN_AND = 1 ' Die kombinierte Region soll eine überlappende _ ' Region der beiden Quellregionen sein Private Const RGN_OR = 2 ' Die kombinierte Region soll der Gesamtbereich der _ ' beiden Regionen inklusive überlappendem Bereich sein Private Const RGN_XOR = 3 ' Die kombinierte Region soll der Gesamtbereich _ ' der beiden Regionen exklusive überlappendem Bereich sein Private Const RGN_DIFF = 4 ' Die kombinierte Region soll der Gesamtbereich _ ' der hSrcRgn1 sein, inklusive des Bereiches der Region die von hSrcRgn2 überlappt wird Private Const RGN_COPY = 5 ' Die kombinierte Region soll der Gesamtbereich _ ' der hSrcRgn2 sein, inklusive des Bereiches der Region die von hSrcRgn1 überlappt wird ' CombineRgn Rückgabe-Konstanten Private Const ERROR = 0 ' Ein Fehler ist aufgetreten Private Const NULLREGION = 1 ' Die kombinierte Region ist leer Private Const SIMPLEREGION = 2 ' Die kombinierte Region ist eine rechteckige (simple) Region Private Const COMPLEXREGION = 3 ' Die kombinierte Region ist eine komplexe Region ' CreateHatchBrush nIndex-Konstanten Private Const HS_BDIAGONAL = 3 Private Const HS_CROSS = 4 Private Const HS_DIAGCROSS = 5 Private Const HS_FDIAGONAL = 2 Private Const HS_HORIZONTAL = 0 Private Const HS_VERTICAL = 1 Private hRgn1 As Long, hRgn2 As Long, hRgn3 As Long Private hBrush As Long
' 2 Regionen Kombinieren und Invertieren Private Sub Form_Load() Dim Retval As Long ' Autoredraw auf True stellen Me.AutoRedraw = True ' Brush erstellen hBrush = CreateHatchBrush(HS_DIAGCROSS, RGB(0, 255, 0)) ' Elliptische Region erstellen hRgn1 = CreateEllipticRgn(20, 30, 150, 110) ' bounding rectangle '(20,30)-(150,110) ' daneben eine rechteckige Region erstellen hRgn2 = CreateRectRgn(150, 30, 200, 110) ' Eine dritte "leere" Region erstellen hRgn3 = CreateRectRgn(0, 0, 0, 0) ' Kombinieren der beiden Regionen (Körper) zu einer Region CombineRgn hRgn3, hRgn1, hRgn2, RGN_XOR ' Kombinierte Region mit dem Brush füllen FillRgn Me.hdc, hRgn3, hBrush ' Invertieren der kombinierten Region InvertRgn Me.hdc, hRgn3 ' Rahmen mit dem Pen um die kombinierte Region zeichnen FrameRgn Me.hdc, hRgn3, hBrush, 5, 10 End Sub
' Ressourcen freigeben Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim Retval As Long ' Löschen des Brushs DeleteObject hBrush ' Löschen der erstellten Regionen DeleteObject hRgn1 DeleteObject hRgn2 DeleteObject hRgn3 End Sub