Ответ 1
У меня нет полного ответа на вопрос "почему?". вопрос, но он не работает, потому что вы получаете объект Graphics
GDI + из дескриптора Window. Вместо этого вы хотите получить его из GDI DC, например:
private void Parse()
{
IntPtr hdc = GetDC(IntPtr.Zero); // get entire screen dc
Graphics graphics = Graphics.FromHdc(hdc));
PointF pointf = new PointF();
graphics.EnumerateMetafile(_metafile, pointf, ParseCallback);
ReleaseDC(IntPtr.Zero, hdc);
}
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);
[DllImport("user32.dll")]
static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc);
Обратите внимание, что вы также можете использовать объект Graphics из метода Form OnPaint(PaintEventArgs e)
, он также должен работать, как в официальном примере кода для метода EnumerateMetafile: Graphics.EnumerateMetafile Method