.NetのFormはFormBorderStyleによりResizeの動作や枠の外観を変更できる。
確かにVisualStudioのデザイン画面上ではFormBorderStyleの変更で外観も追随する。
ところが実行してみるとWindows7上では枠の外観がデザイン画面のそれと一致しない。
少しおかしい…、バグなのか?
確かめてみよう。
以下のコード(DPI仮想化非対応)を用意した。
private void MainForm_Load(object sender, EventArgs e)
{
labelMessage.Text = "FormBorderStyle = " +
this.FormBorderStyle.ToString();
}
private void buttonCopy_Click(object sender, EventArgs e)
{
//Rectangle r = new Rectangle(Left, Top, Width, Height);
Rectangle r = Bounds;
Bitmap bmp = new Bitmap(r.Width, r.Height,
PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
Point sOrg = new Point(r.Left, r.Top);
Point dOrg = new Point(0, 0);
g.CopyFromScreen(sOrg, dOrg,
new Size(r.Width, r.Height),
CopyPixelOperation.SourceCopy);
Clipboard.SetImage(bmp);
bmp.Dispose();
MessageBox.Show("画面キャプチャをClipboardに転送しました。",
"確認",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
ボタンを押すと自身のFormをキャプチャする仕組みだ。
キャプチャの範囲はFormのBoundsを使う。
BoundsとはFormのLeft、Top、Width、Heightを保持するプロパティだ。
これできっちりキャプチャが取れるはずだ。
以下は全てのFormBorderStyleでキャプチャした結果である。
画面上にFormBorderStyleを表示している。
FormBorderStyle=SizableToolWindow

FormBorderStyle=FixedToolWindow

None、SizableToolWindow、Sizable以外は微妙に端が切れてキャプチャされている。
FormのBoundsと異なる形状で表示されていることがわかるだろう。
やはりこれはバグなのか?
.Net APIが返却するFormのBoundsと外観の違いは、VisualStudioのデザイン画面との食い違いを見ても明らかである。
とは言え、この現象はWindows10に於いても改善されていない。
何らかの意味のある「仕様」なのか?
わからないのである…。




