Click to Rate and Give Feedback
MSDN
MSDN Library
.NET Development
.NET Framework 3.5
Graphics Class
Graphics Methods
 EnumerateMetafile Method (Metafile,...
Collapse All/Expand All Collapse All
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
.NET Framework Class Library
Graphics..::.EnumerateMetafile Method (Metafile, Point, Graphics..::.EnumerateMetafileProc)

Sends the records in the specified Metafile, one at a time, to a callback method for display at a specified point.

Namespace:  System.Drawing
Assembly:  System.Drawing (in System.Drawing.dll)
Visual Basic (Declaration)
Public Sub EnumerateMetafile ( _
    metafile As Metafile, _
    destPoint As Point, _
    callback As Graphics..::.EnumerateMetafileProc _
)
Visual Basic (Usage)
Dim instance As Graphics
Dim metafile As Metafile
Dim destPoint As Point
Dim callback As Graphics..::.EnumerateMetafileProc

instance.EnumerateMetafile(metafile, _
    destPoint, callback)
C#
public void EnumerateMetafile(
    Metafile metafile,
    Point destPoint,
    Graphics..::.EnumerateMetafileProc callback
)
Visual C++
public:
void EnumerateMetafile(
    Metafile^ metafile, 
    Point destPoint, 
    Graphics..::.EnumerateMetafileProc^ callback
)
JScript
public function EnumerateMetafile(
    metafile : Metafile, 
    destPoint : Point, 
    callback : Graphics..::.EnumerateMetafileProc
)

Parameters

metafile
Type: System.Drawing.Imaging..::.Metafile
Metafile to enumerate.
destPoint
Type: System.Drawing..::.Point
Point structure that specifies the location of the upper-left corner of the drawn metafile.
callback
Type: System.Drawing..::.Graphics..::.EnumerateMetafileProc
Graphics..::.EnumerateMetafileProc delegate that specifies the method to which the metafile records are sent.

This method enumerates the records contained in the specified metafile. Each record is individually sent to a callback method specified by the callback parameter. Typically, the callback method calls the PlayRecord method to "play back", or draw, the record.

If the callback method calls PlayRecord, it must do so by calling the PlayRecord method of the specific Metafile that is being enumerated.

The following code example creates a form that has a Metafile as one of its private members. The OnPaint method calls EnumerateMetafile, which calls the form's MetafileCallback method for each record in the metafile. The MetafileCallback method calls the PlayRecord method. Notice that the MetafileCallback method receives the record data as an IntPtr, but the PlayRecord method expects the record data to be a byte array. The call to Copy copies the record data to a byte array so that it can be passed to PlayRecord.

Visual Basic
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
' for Marshal.Copy
Imports System.Runtime.InteropServices


Public Class Form1
    Inherits Form
    Private metafile1 As Metafile
    Private metafileDelegate As Graphics.EnumerateMetafileProc
    Private destPoint As Point

    Public Sub New() 
        metafile1 = New Metafile("C:\test.wmf")
        metafileDelegate = New Graphics.EnumerateMetafileProc(AddressOf MetafileCallback)
        destPoint = New Point(20, 10)

    End Sub

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) 
        e.Graphics.EnumerateMetafile(metafile1, destPoint, metafileDelegate)

    End Sub

    Private Function MetafileCallback(ByVal recordType As _
        EmfPlusRecordType, ByVal flags As Integer, ByVal dataSize As Integer, _
        ByVal data As IntPtr, ByVal callbackData As PlayRecordCallback) As Boolean

        Dim dataArray As Byte() = Nothing
        If data <> IntPtr.Zero Then

            ' Copy the unmanaged record to a managed byte buffer 
            ' that can be used by PlayRecord.
            dataArray = New Byte(dataSize) {}
            Marshal.Copy(data, dataArray, 0, dataSize)
        End If

        metafile1.PlayRecord(recordType, flags, dataSize, dataArray)
        Return True

    End Function

    Shared Sub Main() 
        Application.Run(New Form1())
    End Sub

End Class
C#
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

// for Marshal.Copy
using System.Runtime.InteropServices; 

public class Form1 : Form
{
    private Metafile metafile1;
    private Graphics.EnumerateMetafileProc metafileDelegate;
    private Point destPoint;
    public Form1()
    {
        metafile1 = new Metafile(@"C:\Test.wmf");
        metafileDelegate = new Graphics.EnumerateMetafileProc(MetafileCallback);
        destPoint = new Point(20, 10);
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.EnumerateMetafile(metafile1, destPoint, metafileDelegate);
    }
    private bool MetafileCallback(
       EmfPlusRecordType recordType,
       int flags,
       int dataSize,
       IntPtr data,
       PlayRecordCallback callbackData)
    {
        byte[] dataArray = null;
        if (data != IntPtr.Zero)
        {
            // Copy the unmanaged record to a managed byte buffer 
            // that can be used by PlayRecord.
            dataArray = new byte[dataSize];
            Marshal.Copy(data, dataArray, 0, dataSize);
        }

        metafile1.PlayRecord(recordType, flags, dataSize, dataArray);

        return true;
    }

    static void Main()
    {
        Application.Run(new Form1());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0
Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement
Page view tracker