Export (0) Print
Expand All
Expand Minimize
This topic has not yet been rated - Rate this topic

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)
'Declaration
Public Sub EnumerateMetafile ( _
	metafile As Metafile, _
	destPoint As Point, _
	callback As 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.

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

.NET Framework

Supported in: 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

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

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.