C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 45 を表示中)
■24261 / )  メタファイルの生成について
□投稿者/ たくま (1回)-(2008/08/31(Sun) 01:34:08)

分類:[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

返信 編集キー/


管理者用

- Child Tree -