如何获取窗体的非最大化大小?

3

我试图在应用程序关闭时保存System::Windows::Forms::Form的状态。我可以记录窗口的大小、位置和窗口状态,但如果窗口在关闭时处于最大化状态,则::Size成员记录窗口的最大化大小。

有没有办法记录非最大化大小,或者我需要拦截最大化事件并手动记录呢?

1个回答

2

这不是一件容易的事情,你需要使用P/Invoke GetWindowPlacement来实现。最好的方法是只有在窗体处于正确状态时才记录窗口大小。例如:

    protected override void OnResize(EventArgs e) {
        if (this.WindowState == FormWindowState.Normal)
            Properties.Settings.Default.WindowSize = this.Size;
        base.OnResize(e);
    }

GetWindowPlacement很好,但它记录的位置是在WorkingArea坐标系中,你不能轻易地与ScreenArea坐标系混合使用(如果这样做,你的窗口将移动系统任务栏的高度)。 - EricLaw
不必在每次调整大小时都持续保存此值,您还可以在关闭时检查此.WindowState != FormWindowState.Normal,如果它是最大化或最小化,则使用RestoreBounds属性。 - EricLaw
它并不总是持久化的。只有在程序调用Save()方法之后才会持久化。最好在程序退出时完成。 - Hans Passant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接