UDF > WinAPIEx > GDI > MetaFiles >


_WinAPI_CreateEnhMetaFile

Crée un contexte de périphérique pour un métafichier au format étendu

#include <WinAPIGdi.au3>
_WinAPI_CreateEnhMetaFile ( [$hDC = 0 [, $tRECT = 0 [, $bPixels = False [, $sFilePath = '' [, $sDescription = '']]]]] )

Paramètres

$hDC [optionnel] Handle du périphérique de référence pour le métafichier étendu. Le système utilise ce contexte de périphérique pour enregistrer la résolution et les unités du périphérique sur lequel une image est apparue à l'origine.
Si ce paramètre est 0 (par défaut), il utilise le périphérique d'affichage en cours pour référence.
$tRECT [optionnel] Structure $tagRECT qui spécifie les dimensions de l'image à stocker dans le métafichier étendu.
Si ce paramètre est 0 (par défaut), l'interface de périphérique graphique calcule les dimensions du plus petit rectangle qui entoure l'image dessinée par l'application.
$bPixels [optionnel] Indique si la structure $tRect est définie en pixels, les valeurs valides sont:
    True - En unités logiques (pixels).
    False - En unités de 0,01 millimètres (par défaut).
$sFilePath [optionnel] Le nom du fichier pour le métafichier étendu à créer.
Si ce paramètre est '' (par défaut), le métafichier étendu est stocké en mémoire et son contenu est perdu quand il est supprimé en utilisant la fonction _WinAPI_DeleteEnhMetaFile().
$sDescription [optionnel] La chaîne qui spécifie le nom de l'application qui a créé l'image, ainsi que le titre de l'image. Cette chaîne doit être une chaîne vide ou représentée comme suit:
    "nom de l'application|nom de l'image"

Valeur de retour

Succès: Retourne le handle du contexte de périphérique pour le métafichier étendu.
Échec: Retourne 0.

Remarques

Les applications utilisent le contexte de périphérique créé par cette fonction pour enregistrer une image graphique dans un métafichier étendu.
La handle d'identification de ce contexte de périphérique peut être transmis à n'importe quelle fonction GDI.

Après qu'une application ait stocké une image dans un métafichier étendu, elle peut afficher l'image sur un périphérique de sortie en appelant la fonction _WinAPI_PlayEnhMetaFile().
Lors de l'affichage de l'image, le système utilise le rectangle pointé par le paramètre $tRect et les données de résolution du périphérique de référence pour positionner et mettre à l'échelle l'image.

Le nom du fichier du métafichier étendu doit utiliser l'extension .emf.

En relation

_WinAPI_PlayEnhMetaFile

Voir aussi

Consultez CreateEnhMetaFile dans la librairie MSDN.

Exemple

#include <MsgBoxConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIHObj.au3>
#include <WinAPIMisc.au3>

Global Const $sEmf = @TempDir & '\Test.emf'

If FileExists($sEmf) Then
    If MsgBox(BitOR($MB_YESNOCANCEL, $MB_ICONQUESTION, $MB_DEFBUTTON2, $MB_SYSTEMMODAL), 'Crétion du Métafichier Etendu', $sEmf & ' existe déjà.'& @CRLF & @CRLF & 'Voulez-vous le remplacer?') <> 6 Then
        Exit
    EndIf
    If Not FileDelete($sEmf) Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Création Métafichier Etendu', 'Impossible de supprimer le fichier.')
        Exit
    EndIf
EndIf

; Crée un contexte de périphérique pour un métafichier au format étendu
Global $tRECT = _WinAPI_CreateRect(0, 0, 250, 250)
Global $hDC = _WinAPI_CreateEnhMetaFile(0, $tRECT, 1, @TempDir & '\Test.emf')

; Dessine les objets
Global $hBrush = _WinAPI_SelectObject($hDC, _WinAPI_GetStockObject($DC_BRUSH))
Global $hPen = _WinAPI_SelectObject($hDC, _WinAPI_GetStockObject($NULL_PEN))
_WinAPI_SetDCBrushColor($hDC, 0xAA0000)
_WinAPI_Rectangle($hDC, $tRECT)
_WinAPI_SetDCBrushColor($hDC, 0xFFFFFF)

; Définit une étoile à 5 branches
Global $aPoint[10][2]
Calcule($aPoint)
Global $hRgn = _WinAPI_CreatePolygonRgn($aPoint)
_WinAPI_OffsetRgn($hRgn, 0, 6)
_WinAPI_PaintRgn($hDC, $hRgn)

; Supprime les objets
_WinAPI_SelectObject($hDC, $hBrush)
_WinAPI_SelectObject($hDC, $hPen)
Global $hEmf = _WinAPI_CloseEnhMetaFile($hDC)
_WinAPI_DeleteEnhMetaFile($hEmf)
_WinAPI_DeleteObject($hRgn)

; Affiche le fichier .emf créé dans Microsoft Paint
If FileExists($sEmf) Then
    ShellExecute(@SystemDir & '\mspaint.exe', $sEmf)
EndIf

func Calcule(ByRef $aPoint)
    Local $x = 0, $y = 90, $size = 95, $cap = 0
    Local Const $pi = 4*atan(1)

    $aPoint[0][0] = $x
    $aPoint[0][1] = $y

    for $i = 1 to 9
        $x += $size * Cos($cap)
        $y += $size * Sin($cap)
        $aPoint[$i][0] = Round($x)
        $aPoint[$i][1] = Round($y)
        $cap += (Mod($i,2) = 0 ? 4*$pi/5 : -2*$pi/5)
    Next
EndFunc   ;==>Calcule