Export (0) Print
Expand All
Expand Minimize

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)

public void EnumerateMetafile (
	Metafile metafile,
	Point destPoint,
	EnumerateMetafileProc callback
)
public void EnumerateMetafile (
	Metafile metafile, 
	Point destPoint, 
	EnumerateMetafileProc callback
)
public function EnumerateMetafile (
	metafile : Metafile, 
	destPoint : Point, 
	callback : EnumerateMetafileProc
)
Not applicable.

Parameters

metafile

Metafile to enumerate.

destPoint

Point structure that specifies the location of the upper-left corner of the drawn metafile.

callback

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.


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 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0, 1.1, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft