获取包含非客户区域的窗体总高度?

时间:2009-07-24 22:35:01

标签: winforms

如何获取包含非客户区域的Windows窗体的总高度?大小似乎不适用于我的窗口(FormBorderStyle = FixedToolWindow,如果这有帮助)。

3 个答案:

答案 0 :(得分:2)

尝试使用表单的DesktopBounds属性。

答案 1 :(得分:2)

Size属性应该绝对有用。请注意,由于系统字体或设计机器与生产机器之间的视频适配器DPI设置不同,表单可能会重新调整。在加载事件之前,实际大小将不可用。

答案 2 :(得分:0)

如果启用了Aero并且FormBorderStyleFixedToolWindow,则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;
}