GdipEnumerateMetafileDestRectI()



Syntaxe
Resultat.i = GdipEnumerateMetafileDestRectI(*graphics, *metafile, @destRect.Rect, @callback(), *callbackData, *imageAttributes)

Paramètres

*graphics

[in] Pointeur sur un objet Graphics.

*metafile

[in] Pointeur sur un objet metafile existant

destRect.Rect

[in] Coordonnées d'un rectangle (nombres entiers) ou le métafichier sera affiché (ou certains enregistrements) avec la fonction GdipPlayMetafileRecord().

@callback()

[in] Adresse d'une procédure Callback permettant l'énumération du métafichier. Le prototype de cette Callback est défini dans le fichier Gdiplustypes.h.

*callbackData

[in] Pointeur sur un bloc de données qui sera passé à la Callback. Si ce paramètre n'est pas utilisé, il doit être mis à 0.

*imageAttributes

[in] Pointeur sur un objet ImageAttributes qui spécifie les attributs de l'image. Ce paramètre peut être mis à 0 s'il n'est pas utilisé.

Description

Cette fonction est classé par Micosoft dans les fonctions Graphics mais je l'ai classée dans les métafiles.

Cette fonction permet d'énumérer les enregistrements du métafichier identifié par le paramètre *metafile et associé à un graphique (paramètre *graphics).

destRect.Rect défini le rectangle ou les éléments du métafichier seront affichés par la fonction GdipPlayMetafileRecord() dans la callback (si besoin). L'image est redimensionnée de manière à tenir à l'intérieur du rectangle.
L'origine du graphique est toujours à x= 0 et y = 0. Ce paramètre permet d'introduire un décalage de l'origine en x/y ainsi qu'une mise à l'échelle.
Les points sont exprimés en nombre entiers (long), c'est ce qui différencie cette fonction de la fonction
GdipEnumerateMetafileDestRect() dont les coordonnées sont exprimés en nombres flottants.
*callbackData permet de passer un bloc de données à la callback, ces données pourront être utilisées dans la callback. Ce paramètre permet de passer par exemple l'identifiant du métafichier.
Les paramètres de la callback sont définis comme ceci :
recordType : WMF, EMF, EMF+
flags : (toujours 0 pour les enregistrements WMF/EMF)
dataSize : taille des données de l'enregistrement (en octets) ou 0 si pas de données.
data : Pointeur de données sur les données de l'enregistrement, ou #NULL si pas de données.
callbackData : Pointeur sur le bloc de données, s'il existe.
La callback peut ensuite appeler la fonction GdipPlayMetafileRecord() pour afficher les enregistrements (partiellement ou complètement) qui viennent juste d'être énumérés. Si cette fonction retourne #False, l'énumération se termine, sinon elle continue.
*imageAttributes peut être créé à partir d'une fonction comme GdipCreateimageAttributes() ou GdipCloneImageAttributes() pour obtenir un objet ImageAttributes. Les attributs d'image pourront ensuite être modifiés par une des commandes ImageAttributes.
L'exemple affiche à droite le métafichier Placeable_Metafile.wmf complètement aux coordonnées du rectangle définies par le paramètre destRect.Rect. On affiche une deuxième fois le métafichier mais à gauche de la fenêtre. Seuls les enregistrements qui sont différents du type #WmfRecordTypeCreateBrushIndirect (brushIndirect) sont affichés dans la callback d'énumération. La brush étant absente, c'est la brush par défaut de GDI qui est blanche qui est utilisée (le fichier est un ancien format).
Pour les différents types d'enregistrements possibles, reportez-vous à l'exemple de la fonction
GdipEnumerateMetafileDestPointI().
Aperçu de l'exemple :

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