| 分類:[C#]
下記のコードでクリップボードに貼り付けられたメタファイルを、 Excelに貼り付けてみると、サイズが縦横ともの74%に縮められて 貼り付けられてしまいます。 また、同環境のノートPCの解像度を800*600にして同じことを やってみると、100%になりました。(縮まるのは1024x768) Graphics クラスとかMetafileクラスのヘルプをみてもメタファイルの アスペクト比設定いじるメソッドとか見つけられなかったのです。。 どなたかアドバイスいただけないでしょうか? ・メタファイルのアスペクト比を触ることができるのかどうか? ・解像度によって貼り付けられたメタファイルのアスペクト比が 異なっているのは、何が影響しているのか? あたりを。。
private void btnGo_Click(object sender, EventArgs e) { Graphics g = this.CreateGraphics(); IntPtr ipHdc = g.GetHdc(); RectangleF r = new RectangleF(); r.Width = 1; r.Height = 1; Metafile mf = new Metafile(ipHdc, r, MetafileFrameUnit.Inch, EmfType.EmfOnly); g.ReleaseHdc(ipHdc); g.Dispose(); Graphics metaG = Graphics.FromImage(mf); metaG.PageUnit = GraphicsUnit.Inch; metaG.DrawEllipse(new Pen(Color.Blue, 0.01f), 0, 0, 0.5f, 0.5f); metaG.Flush(); metaG.Dispose(); IntPtr hEMF, hEMF2; hEMF = mf.GetHenhmetafile(); if (!hEMF.Equals(new IntPtr(0))) { hEMF2 = CopyEnhMetaFile(hEMF, new IntPtr(0)); if (!hEMF2.Equals(new IntPtr(0))) { if (OpenClipboard(this.Handle)) { if (EmptyClipboard()) { IntPtr hRes = SetClipboardData(14, hEMF2); hRes.Equals(hEMF2); CloseClipboard(); } } } DeleteEnhMetaFile(hEMF); } mf.Dispose(); }
[DllImport("gdi32.dll")] static extern IntPtr CopyEnhMetaFile(IntPtr hemfSrc, IntPtr hNULL); [DllImport("user32.dll")] static extern bool OpenClipboard(IntPtr hWndNewOwner); [DllImport("user32.dll")] static extern bool EmptyClipboard(); [DllImport("user32.dll")] static extern IntPtr SetClipboardData(uint uFormat, IntPtr hMem); [DllImport("user32.dll")] static extern bool CloseClipboard(); [DllImport("gdi32.dll")] static extern bool DeleteEnhMetaFile(IntPtr hemf);
環境 WindowsVistaBusiness VisualStudio2005 Excel2007
|