修改窗体客户区区域(二)

2014-11-24 08:08:59 · 作者: · 浏览: 1
esult = new IntPtr(1);
}
break;
}
base.WndProc(ref m);
}
由于客户区的宽和高都增加了,但窗体大大小和位置并没有变化,因此运行的效果就如图所示,左右和下边框的厚度明显变小,而标题栏没有变化,因为我们没有调整rcClient.top字段。
\ \
因此,如果你再重绘窗体,希望窗体在各版本的
windows
操作系统和主题中表现一致,可以希望保持窗体的版块厚度为BorderWidth,你就可以这样来调整代码:
[c#]
int BorerWidth = 1;
private void AdjustClientRect(ref _RECT rcClient) {
rcClient.left -= SystemInformation.FrameBorderSize.Width - BorerWidth;
rcClient.right += SystemInformation.FrameBorderSize.Width - BorerWidth;
rcClient.bottom += SystemInformation.FrameBorderSize.Width - BorerWidth;
}
这里也没有设置rcClient.top,以为窗体顶部的边框在标题栏上访,这里简单的修改rcClient.top是达不到预期效果的,需要重绘标题栏才行,可以参见《C#重绘Windows窗体标题栏和边框》。运行效果如下:
当然,你也可以利用这个方法,在不设置FormBorderStyle属性为None的情况下,实现无边框窗口的效果。简单修改代码即可实现:
[c#]
private void AdjustClientRect(ref _RECT rcClient) {
rcClient.left -= SystemInformation.FrameBorderSize.Width;
rcClient.right += SystemInformation.FrameBorderSize.Width;
rcClient.bottom += SystemInformation.FrameBorderSize.Width;
rcClient.top -= SystemInformation.FrameBorderSize.Width + SystemInformation.CaptionHeight;
}