GdipIsVisibleClipEmpty()
Syntaxe
|
Resultat.i = GdipIsVisibleClipEmpty(*graphics, @result.i)
Paramètres
|
*graphics[in] Pointeur sur un objet Graphics existant.
result.i[out] Variable qui recevra le résultat du test.
Description
|
Cette fonction permet de déterminer si la zone de découpage visible du graphique est vide ou non.
Si la zone de découpage est vide, result vaudra #True sinon #False.La zone de découpage visible correspond à l'intersection entre la zone de découpage du graphique et la zone de découpage de la fenêtre.
Lorsque l'on crée un graphique, sa zone de découpage est dite infinie, cela signifie que l'ensemble de la surface est disponible pour dessiner.
La zone de découpage visible est différente de la zone de découpage, nous ne verrons à l'écran que la zone visible de découpage.
Si la zone de découpage visible du graphique est vide, ce la signifie qu'il n'y a pas de zone sur laquelle dessiner.
Par conséquent, rien ne pourra être dessiné lorsque la zone de découpage visible est vide.La fonction est illustrée avec deux exemples presque identiques sauf pour le paramètre de combinaison de la zone de découpage visible qui change.
Pour le premier exemple, la zone de découpe rectangulaire est créé avec le mode #CombineModeComplement et pour le second avec le mode #CombineModeReplace.
Un troisième exemple utilise une zone de découpage en dehors de l'affichage de la fenêtre. Dans cet exemple, on utilise la fonction GdipIsClipEmpty() et la fonction GdipIsVisibleClipEmpty().
Cet exemple utilise le mode de combinaison #CombineModeReplace.Pour le premier exemple, la nouvelle zone de découpage visible crée avec le mode de combinaison #CombineModeComplement est vide :
Avant combinaison, la zone initiale existante est infinie.
La zone à combiner est rectangulaire (X = 0, Y = 0, largeur = 350, hauteur = 250).
Après combinaison, la région existante initiale est exclue de la nouvelle zone. Or, la zone rectangulaire complète est une partie de la zone initiale existante, il en résulte que la zone combinée à une surface nulle. La zone de découpage visible est vide.
La fonction GdipIsVisibleClipEmpty() retournera #True. Il ne sera pas possible d'afficher sur cette zone avec GDI+. L'exemple tente d'afficher cette zone en rouge mais sans succès.
Pour le second exemple, la nouvelle zone de découpage créée avec le mode de combinaison #CombineModeReplace n'est pas vide :
Avant combinaison, la région initiale existante est infinie.
La zone à combiner est rectangulaire (X = 0, Y = 0, largeur = 350, hauteur = 250).
Après combinaison, la zone rectangulaire remplace la zone initiale de découpage et devient la nouvelle zone de découpage. La zone de découpage visible n'est pas vide.
La fonction GdipIsVisibleClipEmpty() retournera #False. Il sera possible d'afficher sur cette zone. Cette zone sera colorée en rouge.
Pour le troisième exemple, la nouvelle zone de découpage créée avec le mode de combinaison #CombineModeReplace est non vide :
Avant combinaison, la zone initiale existante est infinie.
La zone à combiner est rectangulaire (X = -100, Y = -100, largeur = 50, hauteur = 50).
Après combinaison, la zone rectangulaire remplace la zone initiale de découpage et devient la nouvelle zone de découpage.
La fonction GdipIsClipEmpty() retournera #False. Il serait possible de dessiner sur cette zone avec GDI+ mais elle n'est pas visible. Par contre, la fonction GdipIsVisibleClipEmpty() retournera #True car l'intersection de la zone de découpage du graphique avec celle de la fenêtre n'est pas visible.
Résultat
de la fonction
|
Si la fonction réussit, elle retourne #Ok qui est une constante de l'énumération status.
Si la fonction échoue, elle retourne une des autres valeurs de l'énumération status.
PB
- OS
|
PureBasic v4.30 bêta 4 (Windows - x86)
Testé avec Windows Vista édition familiale Premium
Exemples
|
XIncludeFile "..\..\gdiplus.pbi" EnableExplicit #MainWindow = 0 #StatusBar = 0 Define .i Procedure myCallback(window, message, wParam, lParam) Protected dc, ps.PAINTSTRUCT, resultat Protected *Localtoken, *Localgfx, *Localbrush Select message Case #WM_PAINT dc = BeginPaint_(window, @ps) If dc ; initialisation de Gdi+ *Localtoken = Gdiplus_New() ; on vérifie que l'initialisation est Ok If *Localtoken ; création du graphique source associé au DC de la fenêtre principale If GdipCreateFromHDC(dc, @*Localgfx) = #Ok ; création de la brush If GdipCreateSolidFill(ARGB(#Red), @*Localbrush) = #Ok ; création de la zone de découpage GdipSetClipRectI(*Localgfx, 150, 50, 230, 200, #CombineModeComplement) ; rempli un rectangle en bleu sur le graphique principal GdipFillRectangleI(*Localgfx, *Localbrush, 0, 0, 350, 250) resultat = 0 If GdipIsVisibleClipEmpty(*Localgfx, @resultat) = #Ok If resultat If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, " GdipIsVisibleClipEmpty a retourné #True") EndIf Else If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, " GdipIsVisibleClipEmpty a retourné #False") EndIf EndIf EndIf ; supprime la brush GdipDeleteBrush(*Localbrush) EndIf ; supprime l'objet graphique GdipDeleteGraphics(*Localgfx) EndIf GdiplusShutdown(*Localtoken) EndIf EndPaint_(window, @ps) EndIf EndSelect ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure If OpenWindow(#MainWindow, 250, 100, 400, 250, "GdiPlus 1.0 - GdipIsVisibleClipEmpty", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) If CreateStatusBar(#StatusBar, WindowID(#MainWindow)) AddStatusBarField(WindowWidth(#MainWindow)) SetWindowCallback(@myCallback()) ; boucle Repeat Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf EndIf End
XIncludeFile "..\..\gdiplus.pbi" EnableExplicit #MainWindow = 0 #StatusBar = 0 Define .i Procedure myCallback(window, message, wParam, lParam) Protected dc, ps.PAINTSTRUCT, resultat Protected *Localtoken, *Localgfx, *Localbrush Select message Case #WM_PAINT dc = BeginPaint_(window, @ps) If dc ; initialisation de Gdi+ *Localtoken = Gdiplus_New() ; on vérifie que l'initialisation est Ok If *Localtoken ; création du graphique source associé au DC de la fenêtre principale If GdipCreateFromHDC(dc, @*Localgfx) = #Ok ; création de la brush If GdipCreateSolidFill(ARGB(#Red), @*Localbrush) = #Ok ; création de la zone de découpage GdipSetClipRectI(*Localgfx, 0, 0, 130, 200, #CombineModeReplace) ; rempli un rectangle en bleu sur le graphique principal GdipFillRectangleI(*Localgfx, *Localbrush, 0, 0, 350, 250) resultat = 0 If GdipIsVisibleClipEmpty(*Localgfx, @resultat) = #Ok If resultat If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, " GdipIsVisibleClipEmpty a retourné #True") EndIf Else If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, " GdipIsVisibleClipEmpty a retourné #False") EndIf EndIf EndIf ; supprime la brush GdipDeleteBrush(*Localbrush) EndIf ; supprime l'objet graphique GdipDeleteGraphics(*Localgfx) EndIf GdiplusShutdown(*Localtoken) EndIf EndPaint_(window, @ps) EndIf EndSelect ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure If OpenWindow(#MainWindow, 250, 100, 400, 250, "GdiPlus 1.0 - GdipIsVisibleClipEmpty exemple 2", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) If CreateStatusBar(#StatusBar, WindowID(#MainWindow)) AddStatusBarField(WindowWidth(#MainWindow)) SetWindowCallback(@myCallback()) ; boucle Repeat Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf EndIf End
XIncludeFile "..\..\gdiplus.pbi" EnableExplicit #MainWindow = 0 #StatusBar = 0 #SB_GETTEXT = 1026 #SB_GETTEXTLENGTH = 1027 Define .i Procedure.s GetStatusBartext(StatusBarStaticID, Field) Protected length, a$ If IsStatusBar(StatusBarStaticID) length = SendMessage_(StatusBarID(StatusBarStaticID), #SB_GETTEXTLENGTH, Field ,0) If length a$ = Space(length & $0000FFFF) SendMessage_(StatusBarID(StatusBarStaticID), #SB_GETTEXT, Field, @a$) ProcedureReturn a$ EndIf EndIf ProcedureReturn "" EndProcedure Procedure myCallback(window, message, wParam, lParam) Protected dc.l, ps.PAINTSTRUCT, resultat.l Protected *Localtoken, *Localgfx, *Localbrush Select message Case #WM_PAINT dc = BeginPaint_(window, @ps) If dc ; initialisation de Gdi+ *Localtoken = Gdiplus_New() ; on vérifie que l'initialisation est Ok If *Localtoken ; création du graphique source associé au DC de la fenêtre principale If GdipCreateFromHDC(dc, @*Localgfx) = #Ok ; création de la brush If GdipCreateSolidFill(ARGB(#Red), @*Localbrush) = #Ok ; création de la zone de découpage GdipSetClipRectI(*Localgfx, -100, -100, 50, 50, #CombineModeReplace) ; rempli un rectangle en bleu sur le graphique principal GdipFillRectangleI(*Localgfx, *Localbrush, 0, 0, 400, 250) resultat = 0 If GdipIsClipEmpty(*Localgfx, @resultat) = #Ok If resultat If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, " GdipIsClipEmpty a retourné #True") EndIf Else If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, " GdipIsClipEmpty a retourné #False") EndIf EndIf EndIf resultat = 0 If GdipIsVisibleClipEmpty(*Localgfx, @resultat) = #Ok If resultat If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, GetStatusBartext(#StatusBar, 0) + Space(25) + "GdipIsVisibleClipEmpty a retourné #True") EndIf Else If IsStatusBar(#StatusBar) StatusBarText(#StatusBar, 0, GetStatusBartext(#StatusBar, 0) + Space(25) + "GdipIsVisibleClipEmpty a retourné #False") EndIf EndIf EndIf ; supprime la brush GdipDeleteBrush(*Localbrush) EndIf ; supprime l'objet graphique GdipDeleteGraphics(*Localgfx) EndIf GdiplusShutdown(*Localtoken) EndIf EndPaint_(window, @ps) EndIf EndSelect ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure If OpenWindow(#MainWindow, 250, 100, 500, 309, "GdiPlus 1.0 - GdipIsClipEmpty/GdipIsVisibleClipEmpty exemple 3", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) If CreateStatusBar(#StatusBar, WindowID(#MainWindow)) AddStatusBarField(WindowWidth(#MainWindow)) SetWindowCallback(@myCallback()) ; boucle Repeat Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf EndIf End