如何获取包含非客户区域的Windows窗体的总高度?大小似乎不适用于我的窗口(FormBorderStyle = FixedToolWindow,如果这有帮助)。
答案 0 :(得分:2)
尝试使用表单的DesktopBounds属性。
答案 1 :(得分:2)
Size属性应该绝对有用。请注意,由于系统字体或设计机器与生产机器之间的视频适配器DPI设置不同,表单可能会重新调整。在加载事件之前,实际大小将不可用。
答案 2 :(得分:0)
如果启用了Aero并且FormBorderStyle
为FixedToolWindow
,则Windows会对表单的大小撒谎。我认为Form
中的以下代码将给出这样一个窗口的正确高度和宽度。
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();
// When Aero is enabled, and our FormBorderStyle is FixedToolWindow,
// Windows will lie to us about our size and position.
public bool AeroIsMessingWithUs()
{
bool ret = false;
// check for other Fixed styles here if needed
if (FormBorderStyle == System.Windows.Forms.FormBorderStyle.FixedToolWindow)
{
if (Environment.OSVersion.Version.Major >= 6 && DwmIsCompositionEnabled())
{
// Aero is enabled
ret = true;
}
}
return ret;
}
public int MyWindowHeight()
{
int height = Height;
if (AeroIsMessingWithUs())
{
// there are actually 5 more pixels on the top and bottom
height += 10;
}
return height;
}
public int MyWindowWidth()
{
int width = Width;
if (AeroIsMessingWithUs())
{
// there are 5 more pixels on the left and right
width += 10;
}
return width;
}