Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Verschiedene Fensterformen
+----------------------------------------------------------+
| combrgn.prf |
| Autor: Sebastian König |
| email: feedback@sekoenig.de |
| Homepage: http://www.sekoenig.de |
| Spielereien mit CombineRgn() |
+----------------------------------------------------------+
+===================================================+
# Dieser Quelltext baut auf Code aus PRFellow 99 #
# von Thomas Hölzer auf. An dieser Stelle noch #
# mal vielen Dank und ein grosses Lob an den #
# Autor! #
# #
# Mehr zu PRFellow gibt`s unter: #
# http://prfellow.home.pages.de #
+===================================================+
--Benötigte Funktionen
DEF SetWindowRgn(3) !USER32,SetWindowRgn
DEF CreateEllipticRgn(4) !GDI32,CreateEllipticRgn
DEF CreateRectRgn(4) !GDI32,CreateRectRgn
DEF CreatePolyRgn(3) !GDI32,CreatePolygonRgn
DEF CombineRgn(4) !GDI32,CombineRgn
DEF DeleteObject(1) !GDI32,DeleteObject
--Deklarationen
declare DEST&,SOURCE1&,SOURCE2& für CombineRgn()
---Neues Fenster erstellen
windowstyle 16
window 0,0-400,400
windowtitle ...
Jetzt geht`s los...
---Fenster mit eckigem Loch
SetWindowPos %hwnd=0,0-400,400 Fenster anpassen
windowtitle Eckiges Loch
cls 0 Damit das Ergebnis besser
sichtbar wird
TextColor @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST& = CreateRectRgn(0,0,0,0) Die neue Region mit 0 initialisiern
let SOURCE1& = CreateRectRgn(0,0,400,400) Die 1. der beiden zu kombinierenden
Regionen
let SOURCE2& = CreateRectRgn(100,100,300,300) ...und die 2.
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3) Die beiden Regionen werden kombiniert
und das Ergebnis wird in
DEST& gespeichert
SetWindowRgn(%hwnd,DEST&,1) Nun ändern wir nur noch die Region
des Fensters...
waitinput warten...
---Fenster mit rundem Loch
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Rundes Loch
cls 0
TextColor @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST& = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,400,400) |
let SOURCE2& = CreateEllipticRgn(100,100,300,300) |
> siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3) |
|
SetWindowRgn(%hwnd,DEST&,1) /
waitinput und wieder warten...
---Fenster, das in 2 Hälften geteilt ist
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Geteiltes Window
cls 0
TextColor @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST& = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,170,400) |
let SOURCE2& = CreateRectRgn(230,0,400,400) |
> siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3) |
|
SetWindowRgn(%hwnd,DEST&,1) /
waitinput das übliche...
---Auch geteilt, nur anders....
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Geteiltes Window, die 2.
cls 0
TextColor @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST& = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,200,200) |
let SOURCE2& = CreateEllipticRgn(200,200,400,400) |
> siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3) |
|
SetWindowRgn(%hwnd,DEST&,1) /
waitinput und wieder...
---Schlüsselloch-Fenster
SetWindowPos %hwnd=%winLeft,%winTop-200,300
windowtitle ... Sieht man eh´ nicht ganz...
cls 0
TextColor @RGB(31,31,31),-1
DrawText 33,1,Mausklick = Weiter
let DEST& = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateEllipticRgn(0,0,200,200) |
let SOURCE2& = CreateRectRgn(50,100,150,400) |
> siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,2) |
|
SetWindowRgn(%hwnd,DEST&,1) /
waitinput was auch sonst?
---4-geteiltes-Fenster
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle 4-geteiltes-Fenster
cls 0
TextColor @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Ende
let DEST& = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,170,400) |
let SOURCE2& = CreateRectRgn(230,0,400,400) > siehe oben...
|
CombineRgn(DEST&,SOURCE1&,SOURCE2&,2) /
jetzt wird es anders:
let SOURCE1& = DEST& wir speichern DEST in SOURCE1,
let SOURCE2& = CreateRectRgn(0,170,400,230) erstellen noch eine Region...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,4) ...und kombinieren ein 2. Mal
SetWindowRgn(%hwnd,DEST&,1) ab jetzt wieder alles wie oben...
waitinput auch das bleibt gleich...
---Und das war`s...
DeleteObject(DEST&) wir geben die erstellten Regionen
DeleteObject(SOURCE1&) wieder frei
DeleteObject(SOURCE2&) (Dank an Christian Zietz)
end