次の方法で共有


Graphics.EnumerateMetafile メソッド (Metafile, Point, Graphics.EnumerateMetafileProc)

指定した Metafile オブジェクトのレコードをコールバック メソッドに一度に 1 つずつ送信して、指定した点に表示します。

Overloads Public Sub EnumerateMetafile( _
   ByVal metafile As Metafile, _   ByVal destPoint As Point, _   ByVal callback As Graphics.EnumerateMetafileProc _)
[C#]
public void EnumerateMetafile(Metafilemetafile,PointdestPoint,Graphics.EnumerateMetafileProccallback);
[C++]
public: void EnumerateMetafile(Metafile* metafile,PointdestPoint,Graphics.EnumerateMetafileProc* callback);
[JScript]
public function EnumerateMetafile(
   metafile : Metafile,destPoint : Point,callback : Graphics.EnumerateMetafileProc);

パラメータ

  • metafile
    列挙する Metafile オブジェクト。
  • destPoint
    描画するメタファイルの左上隅の位置を指定する Point 構造体。
  • callback
    メタファイル レコードの送信先のメソッドを指定する Graphics.EnumerateMetafileProc デリゲート。

戻り値

このメソッドは値を返しません。

解説

このメソッドは、指定したメタファイルに含まれるレコードを列挙します。各レコードは、 callback パラメータで指定されるコールバック メソッドに個別に送信されます。通常、コールバック メソッドは、 PlayRecord メソッドを呼び出してレコードを "再生" することにより描画します。

コールバック メソッドは、 Metafile.PlayRecord を呼び出す場合、列挙する特定の Metafile オブジェクトの PlayRecord メソッドを呼び出す必要があります。

使用例

[C#] 次の例では、プライベート メンバの 1 つとして Metafile オブジェクトを含むフォームを作成します。OnPaint メソッドで EnumerateMetafile が呼び出され、そこからフォームの MetafileCallback メソッドがメタファイル中の各レコードに対して呼び出されます。MetafileCallback メソッドは、 PlayRecord メソッドを呼び出します。MetafileCallback メソッドはレコード データを IntPtr として受け取りますが、 PlayRecord メソッドはバイト配列のレコード データを前提としていることに注意してください。Marshal.Copy を呼び出すと、レコード データは、 PlayRecord に渡せるようにバイト配列にコピーされます。

 
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Runtime.InteropServices; // for Marshal.Copy
public class Form1 : Form
{
   private Metafile m_metafile;
   private Graphics.EnumerateMetafileProc m_delegate;
   private Point m_destPoint;  
   public Form1()
   {
      m_metafile = new Metafile("MyMetafile.emf");
      m_delegate = new Graphics.EnumerateMetafileProc(MetafileCallback);
      m_destPoint = new Point(20, 10);
   }
   protected override void OnPaint(PaintEventArgs e)
   {
      e.Graphics.EnumerateMetafile(m_metafile, m_destPoint, m_delegate);
   }        
   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);
      }
      
      m_metafile.PlayRecord(recordType, flags, dataSize, dataArray);
            
      return true;
   }
   static void Main() 
   {
      Application.Run(new Form1());
   }
}
        

[Visual Basic, C++, JScript] Visual Basic、C++、および JScript のサンプルはありません。C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Graphics クラス | Graphics メンバ | System.Drawing 名前空間 | Graphics.EnumerateMetafile オーバーロードの一覧