using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Runtime.InteropServices; using System.Windows.Forms; class EnumMetafile: Form { Metafile mf; Panel panel = new Panel(); public static void Main() { Application.Run(new EnumMetafile()); } public EnumMetafile() { Splitter splitter = new Splitter(); splitter.Parent = this; splitter.Dock = DockStyle.Left; // Right; panel.Parent = this; panel.Dock = DockStyle.Left; panel.Paint += new PaintEventHandler(PanelOnPaint); Menu = new MainMenu(); Menu.MenuItems.Add("&Open!", new EventHandler(MenuOpenOnClick)); } void MenuOpenOnClick(object obj, EventArgs ea) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "All Metafiles|*.wmf;*.emf|" + "Windows Metafile (*.wmf)|*.wmf|" + "Enhanced Metafile (*.emf)|*.emf"; if (dlg.ShowDialog() == DialogResult.OK) { mf = new Metafile(dlg.FileName); panel.Invalidate(); Graphics grfx = CreateGraphics(); grfx.EnumerateMetafile(mf, new Point(0, 0), new Graphics.EnumerateMetafileProc(EnumMetafileProc)); grfx.Dispose(); } } bool EnumMetafileProc(EmfPlusRecordType eprt, int iFlags, int iDataSize, IntPtr ipData, PlayRecordCallback prc) { if (iDataSize > 0) { byte[] abyData = new Byte[iDataSize]; Marshal.Copy(ipData, abyData, 0, iDataSize); foreach (byte by in abyData) Console.WriteLine(" {0:X2}", by); } return true; } void PanelOnPaint(object obj, PaintEventArgs pea) { Panel panel = (Panel) obj; Graphics grfx = pea.Graphics; if (mf != null) grfx.DrawImage(mf, 0, 0); } }