Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Visual Basic
Nepravidelná okna ve VB, část 2
27. července 2000, 00.00 | Pokračování seriálu o speciálních oknech ve windows. Tentokrát pokročilé metody návrhu..
V této části Vám ukáži, jak kombinovat různé regiony do jednoho složitějšího.
Kombinování regionů zajišťuje funkce CombineRgn
Public Declare Function CombineRgn Lib "gdi32" _ ( _ ByVal hDestRgn As Long, _ ByVal hSrcRgn1 As Long, _ ByVal hSrcRgn2 As Long, _ ByVal nCombineMode As Long _ ) As Long
Kde: hDestRgn – výstupní region
hSrcRgn1 – zdrojový
region A
hSrcRgn2 – zdrojový
region B
nCombineMode – mód pro
kombinování regionů
Pozor: Před použitím této funkce musí již nějaký region hDestRgn existovat.
Módy pro kombinování:
RGN_AND - průnik dvou zdrojových regionů A a B (A * B)
RGN_COPY - vytvoří region určený zdrojovým regionem A (A)
RGN_DIFF – výsledný region je část zdrojového regionu A, která není částí zdr. regionu B (A – B)
RGN_OR – výsledný region je kombinací obou regionů A a B (A + B)
RGN_XOR – výsledný region je kombinací obou regionů A a B, mimo části,
kterou se překrývají (A + B – A*B)
na obrázku najdete každý z těchto módů s příkladem:
Příklad k vytvoření základního tvaru kombinací dvou regionů:
'============================= ' vytvor jednoduche regiony mRgn1=CreateRectRgn(10,10,200,200) mRgn2=CreateEllipticRgn(50,50,250,250) mRgnD=CreateRectRgn(0,0,1,1) CombineRgn mRgnD, mRgn1, mRgn2, RGN_XOR SetWindowRgn Me.hwnd, mRgnD, True '==============================
Příklad na všechny druhy kombinací najdete zde. Jak složité regiony budete tvořit je již na Vás, možností spojování regionů kombinováním je nekonečně mnoho. Některé příklady najdete také na této stránce: http://vbasic.zde.cz v sekci Tips/Tricks – Regions
Další užitečné funkce pro práci s regiony:
OffsetRgn:
Public Declare Function OffsetRgn Lib "gdi32" Alias "OffsetRgn" _ ( _ ByVal hRgn As Long, _ ByVal x As Long, _ ByVal y As Long _ ) As Long
- funkce posune region hRgn o hodnoty X, Y
GetRgnBox:
Public Declare Function GetRgnBox Lib "gdi32" Alias "GetRgnBox" _ ( _ ByVal hRgn As Long, _ lpRect As RECT _ ) As Long
- uloží do hodnoty lpRECT (typu RECT) krajni body [X1,Y1] a [X2,Y2] meznich hranic jakehokoliv regionu regionu.
PtInRegion:
Public Declare Function PtInRegion Lib "gdi32" Alias "PtInRegion" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long - zjistí zda-li bod [X,Y] je uvnitř regionu. Vrací True/False
RectInRgn:
Public Declare Function RectInRegion Lib "gdi32" Alias "RectInRegion" _ ( _ ByVal hRgn As Long, _ lpRect As RECT _ ) As Long
- zajistí zda obdélník lpRect (typu RECT) je všemi svými body uvnitř regionu.
EqualRgn:
Public Declare Function EqualRgn Lib "gdi32" Alias "EqualRgn" _ ( _ ByVal hSrcRgn1 As Long, _ ByVal hSrcRgn2 As Long _ ) As Long
- porovnává dva regiony. Pokud jsou naprosto identické vrací True
V příští, poslední, části tohoto návodu na tvorbu nepravidelných oken se dozvíte, jak vytvářet region z písma (fontu), o tvorbě regionu z vybrané barvy na bitmapě, či jak udělat animované okno…
Obsah seriálu (více o seriálu):
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007