Français
Source/ Codesnippets

Bestimmen Combinergn Fensterformen

 
Wiedermal dank Sebastian König peux avec diesem Snipped qui forme de Windows beliebig modifié volonté:
+----------------------------------------------------------+
| combrgn.prf                                              |
| Autor: Sebastian König                                   |
| email: feedback@sekoenig.de                              |
| Page d'accueil: http://www.sekoenig.de                         |
| Spielereien avec CombineRgn()                             |
+----------------------------------------------------------+
+===================================================+
# cette Voir le texte source baut sur Code aus PRFellow 99    #
# de Thomas Bois sur. à cette Stelle encore      #
# la fois vielen Dank et un grosses Lob à den        #
# Autor!                                            #
#                                                   #
# plus trop PRFellow gibt`s sous:                    #
# 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&                pour CombineRgn()
---Neues la fenêtre erstellen
style de fenêtre 16
window 0,0-400,400
windowtitle ...
maintenant allez`s à l'attaque...
---la fenêtre avec eckigem Loch
SetWindowPos %hwnd=0,0-400,400                   la fenêtre anpassen
windowtitle Eckiges Loch
cls 0                                            avec cela cela Ergebnis besser
sichtbar wird
Couleur du texte @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST&    = CreateRectRgn(0,0,0,0)            qui neue région avec 0 initialisiern
let SOURCE1& = CreateRectRgn(0,0,400,400)        qui 1. qui beiden trop kombinierenden
Regionen
let SOURCE2& = CreateRectRgn(100,100,300,300)    ...et qui 2.
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)            qui beiden Regionen volonté kombiniert
et cela Ergebnis wird dans
DEST& gespeichert
SetWindowRgn(%hwnd,DEST&,1)                      eh bien ändern wir seulement encore qui région
des Fensters...
waitinput   attendre...
---la fenêtre avec rundem Loch
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Rundes Loch
cls 0
Couleur du texte @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 dessus...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   et wieder attendre...
---la fenêtre, cela dans 2 Hälften geteilt ist
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Geteiltes Fenêtre
cls 0
Couleur du texte @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 dessus...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   cela übliche...
---aussi geteilt, seulement anders....
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Geteiltes Fenêtre, qui 2.
cls 0
Couleur du texte @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 dessus...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   et wieder...
---Schlüsselloch-la fenêtre
SetWindowPos %hwnd=%winLeft,%winTop-200,300
windowtitle ...     Sieht on eh´ pas entier...
cls 0
Couleur du texte @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 dessus...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,2)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   quoi aussi sonst?
---4-geteiltes-la fenêtre
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle 4-geteiltes-la fenêtre
cls 0
Couleur du texte @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 dessus...
|
CombineRgn(DEST&,SOURCE1&,SOURCE2&,2)            /
maintenant wird es anders:
let SOURCE1& = DEST&                            wir Sauver DEST dans SOURCE1,
let SOURCE2& = CreateRectRgn(0,170,400,230)     erstellen encore une région...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,4)           ...et kombinieren un 2. la fois
SetWindowRgn(%hwnd,DEST&,1)                     ab maintenant wieder alles comment dessus...
waitinput   aussi cela bleibt juste...
---et cela était`s...
DeleteObject(DEST&)                             wir donner qui erstellten Regionen
DeleteObject(SOURCE1&)                          wieder libre
DeleteObject(SOURCE2&)                          (Dank à Christian Zietz)
end
 
20.04.2004  
 



qui Dank pour cette Code allez à Herrn Dieter Zornow
Stand 06/04, source:  [...] 

Fenêtre Regionen
Autor: Dieter Zornow
pas alle Def´s sommes benutzt
Code ist libre
Def WindowFromDC(1) ! user32,WindowFromDC
Def GetDC(1) ! user32,GetDC
Def GetWindowDC(1) ! user32,GetWindowDC
Def ReleaseDC(2) ! user32,ReleaseDC
Def SaveDC(1) ! gdi32,SaveDC
Def RestoreDC(2) ! gdi32,RestoreDC
Def GetCurrentObject(2) ! gdi32,GetCurrentObject
Def GetWindowRgn(2) ! user32,GetWindowRgn hndl&,reg-hndl&
Def SetWindowRgn(3) ! user32,SetWindowRgn hndl&,reghndl&,redrawflag
Def DeleteObject(1) ! gdi32,DeleteObject hndl&
Def SelectObject(2) ! gdi32,SelectObject hdc,hndl&
Def InvertRgn(2) ! gdi32,InvertRgn hdc&,hdnl&
Def FillRgn(3) ! gdi32,FillRgn hdc, handl,brush
Def PaintRgn(2) ! gdi32,PaintRgn hdc,handl
Def FrameRgn(5) ! gdi32,FrameRgn
Def GetRgnBox(2) ! gdi32,GetRgnBox  hdnl,rect
Def CombineRgn(4) ! gdi32,CombineRgn
Def Moverect(3) ! gdi32,OffsetRgn
Def PtInRegion(3) ! gdi32,PtInRegion hndl qui région, x, y
Def PtVisible(3) ! gdi32,PtVisible
Def RectVisible(2) ! gdi32,RectVisible hdc,rect#
Def RectInRegion(2) ! gdi32,RectInRegion
Def SetRectRgn(5) ! gdi32,SetRectRgn
Def CreateRectRgn(4) ! gdi32,CreateRectRgn
Def CreateEllipticRgn(4) ! gdi32,CreateEllipticRgn
Def CreateRoundRectRgn(6) ! gdi32,CreateRoundRectRgn x%,y%,x1%,y2%,height%,width%
Def CreatePolygonRgn(3) ! gdi32,CreatePolygonRgn
Def CreateSolidBrush(1) ! GDI32,CreateSolidBrush
Def CreateHatchBrush(2) ! GDI32,CreateHatchBrush
Def CreatePen(3) ! gdi32,Def CreatePen
Def CreatePenIndirect(3) ! gdi32,CreatePenIndirect

proc Rahmenrec

    paramètre %hdc, handle qui région, 1 ou bien 2 pour brushauswahl,Rahmenbreite,Rahmenhöhe,brushstyle,color
    parameters hdc&,rgn&,brush&,x%,y%,style&,col&
    Déclarer sb&
    cas Brush& = 1:sb& = CreateHatchBrush(style&,col&)
    cas Brush& = 2:sb& = CreateSolidBrush(col&)
    FrameRgn(hdc&,rgn&,sb&,x%,y%)
    DeleteObject(sb&)

endproc

Proc InvertRgn XOR, beim zweiten Aufruf wieder normal

    paramètre %hdc, handle qui région
    parameters hdc&,hndl&
    InvertRgn(hdc&,hndl&)
    InvertRgn(%hdc2,hndl&) Sicherungskopie

endproc

Proc CreateRechteck

    paramètre xecke, yecke, länge, höhe
    parameters x%,y%,xl%,yh%
    Déclarer Hndl&
    xl% = x%+xl%
    yh% = y%+yh%
    hndl& = CreateRectRgn(x%,y%,xl%,yh%)
    return hndl&

endproc

Proc CreateKreis

    paramètre xecke, yecke, Durchmesser, Durchmesser - > chez Kreis,  / chez Elipse Werte je pour Taille
    parameters x%,y%,xl%,yh%
    Déclarer Hndl&
    xl% = x%+xl%
    yh% = y%+yh%
    hndl& = CreateEllipticRgn(x%,y%,xl%,yh%)
    return hndl&

endproc

Proc CreateRundEck

    paramètre xecke, yecke, länge, höhe abrunden, weite abrunden
    parameters x%,y%,xl%,yh%,h%,w%
    Déclarer Hndl&
    xl% = x%+xl%
    yh% = y%+yh%
    hndl& = CreateRoundRectRgn(x%,y%,xl%,yh%,h%,w%)
    return hndl&

endproc

Proc CreateVieleck Anzahl paramètre muss toujours un vielfaches de 2 son.

    Variable Anzahl de Parametern, je pour Eckenzahl, chacun coin nécessaire 2 Werte, x et Y
    Déclarer ecken%,hndl&,point#,offset%,point1#
    ecken% = %PCount
    offset% = 0
    Faible point#,ecken% * 4

    whileloop ecken% ab Profan 7 au-dessous dans une normale tandis que - Boucle transformer et jusqu'à ecken% aufzählen

        long point#,offset% = @%(&loop)
        offset% = offset% + 4

    endwhile

    hndl& = CreatePolygonRgn(point#,(ecken% / 2),2)
    Dispose point#
    return hndl&

endproc

proc Sfillregn

    paramètre %hdc, handle qui région, Color
    parameters hdc&,hndl&,col&
    Déclarer sb&
    sb& = CreateSolidBrush(col&)
    FillRgn(hdc&,hndl&,sb&)
    FillRgn(%hdc2,hndl&,sb&)
    DeleteObject(sb&)

endproc

proc Hfillregn

    paramètre %hdc, handle qui région, brush style, Color
    parameters hdc&,hndl&,style&,col&
    Déclarer sb&
    sb& = CreateHatchBrush(style&,col&)
    FillRgn(hdc&,hndl&,sb&)
    FillRgn(%hdc2,hndl&,sb&)
    DeleteObject(sb&)

endproc

proc compregn

    paramètre Handle qui Zielregion, Handle qui 1. trop integrierenden région, Handle qui 2. trop integrierenden région, Integrierungsmodus
    parameters HdDes&,Hdsour1&,Hdsour2&,mode&
    CombineRgn(HdDes&,Hdsour1&,Hdsour2&,mode&)

endproc

Beispiel
cls
Déclarer rk&,kr&,re&,ve&,kr2&,rk2&,rk3&,el&
CreateRechteck 10,10,50,20 1 Rechteck
rk& = @&(0)
sfillregn %hdc,rk&,255
CreateKreis 10,35,50,50  Kreis
kr& = @&(0)
sfillregn %hdc,kr&,16740608
CreateKreis 100,35,25,50  Elipse
el& = @&(0)
sfillregn %hdc,el&,16740608
CreateRundEck 10,90,50,30,20,30
re& = @&(0)
sfillregn %hdc,re&,65280
CreateKreis 10,130,50,50 combin 1
kr2& = @&(0)
Hfillregn %hdc,kr2&,5,65535
CreateRechteck 58,145,50,20 Combin 2
rk2& = @&(0)
Hfillregn %hdc,rk2&,5,65535
CreateRechteck 10,185,50,20 umrahmtes Rechteck
rk3& = @&(0)
Rahmenrec %hdc,rk3&,2,2,2,0,255
compregn kr2&,kr2&,rk2&,2 combin1 et combin2 volonté trop einer région Handle = kr2& RGN_OR
DeleteObject(rk2&) existiert déjà pas plus
CreateVieleck 10,400,50,300,100,400 Dreieck
ve& = @&(0)
Sfillregn %hdc,ve&,255
Localiser 30,30
cas PtInRegion(ve&,30,380) = 1:Imprimer cet Koordinate liegt im Dreieck Abfrage si Koordinate im Dreieck liegt
waitinput
InvertRgn(%hdc,rk&) qui Regionen volonté beim ersten la fois invertiert
InvertRgn(%hdc,kr&)
InvertRgn(%hdc,re&)
InvertRgn(%hdc,kr2&)
InvertRgn(%hdc,rk3&)
InvertRgn(%hdc,ve&)
InvertRgn(%hdc,el&)
waitinput
InvertRgn(%hdc,rk&) qui Regionen volonté beim zweiten la fois wieder normal angezeigt
InvertRgn(%hdc,kr&)
InvertRgn(%hdc,re&)
InvertRgn(%hdc,kr2&)
InvertRgn(%hdc,rk3&)
InvertRgn(%hdc,ve&)
InvertRgn(%hdc,el&)
waitinput
SetWindowRgn(%Hwnd,ve&,1) Fenêtre wird seulement encore dans diesem Bereich angezeigt, 1 = neuzeichnen, 0 = non
paramètre Fenêtre handle, région handle, neuzeichen
waitinput
DeleteObject(rk&) alles wieder freigeben, ist notwendig
DeleteObject(kr&)
DeleteObject(re&)
DeleteObject(kr2&)
DeleteObject(rk2&)
DeleteObject(rk3&)
DeleteObject(ve&)
DeleteObject(el&)
end
-----------------------------------------------------------------------
Pour Vieleck
ALTERNATE = 1 Alternative entre pleine et ungefüllt
WINDING = 2 cela dreieck normal pleine
fnCombineMode
Specifies a mode indicating how le two regions veux être combined. This paramètre can être one of le following values:
Value	Description
RGN_AND	Creates le intersection of le two combined regions.
RGN_COPY	Creates a copy of le région identified by hrgnSrc1.
RGN_DIFF	Combines le parts of hrgnSrc1 that sont not part of hrgnSrc2.
RGN_OR	        Creates le union of two combined regions.
RGN_XOR	Creates le union of two combined regions except for any overlapping areas.
{ CombineRgn() Styles }
RGN_AND = 1;
RGN_OR = 2;
RGN_XOR = 3;
RGN_DIFF = 4;
RGN_COPY = 5;
RGN_MIN = ~RGN_AND;
RGN_MAX = ~RGN_COPY;
Hatch-brush-werte
HS_HORIZONTAL = 0;       { ----- }
HS_VERTICAL   = 1;       { ||||| }

HS_FDIAGONAL  = 2;       {///// }

    HS_BDIAGONAL  = 3;       { \\ }
    HS_CROSS      = 4;       { +++++ }
    HS_DIAGCROSS  = 5;       { xxxxx }
 
02.06.2004  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

4.085 Views

Untitledvor 0 min.
p.specht14.07.2018
Paul Glatz27.09.2014
Manfred Barei27.12.2013
Julian Schmidt24.10.2012
plus...

Themeninformationen

cet Thema hat 1 participant:

unbekannt (2x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie