winforms 检查当前最小化的窗口在最小化时是处于最大化还是正常状态

9nvpjoqh  于 2023-02-24  发布在  其他
关注(0)|答案(3)|浏览(176)

如何区分当前最小化的窗口在此之前是否已最大化,而不是C#/WinForms中的正常状态?

if (WindowState == FormWindowState.Minimized)
{
    Properties.Settings.Default.Location = RestoreBounds.Location;
    Properties.Settings.Default.Size = RestoreBounds.Size;
    Properties.Settings.Default.IsMaximized = ...; // How do I know if the window would be restored to maximized?
}

我想使用应用程序设置使窗口的位置和状态保持不变,我遵循https://stackoverflow.com/a/1876326/492336,但如果窗口在关闭时最小化,我不希望它在下一次应用程序启动时最小化(这是目前的答案)。
我想要的是,如果窗口在最小化时已经最大化,则它开始最大化;如果窗口在最小化时处于正常状态,则它开始处于正常状态。

xxls0lw8

xxls0lw81#

WinForms不公开任何WindowStateChanged事件,您必须自己跟踪它。当窗体状态更改时,Windows将发送WM_SYSCOMMAND

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();

        _isMaximized = WindowState == FormWindowState.Maximized;
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_SYSCOMMAND)
        {
            int wparam = m.WParam.ToInt32() & 0xfff0;

            if (wparam == SC_MAXIMIZE)
                _isMaximized = true;
            else if (wparam == SC_RESTORE)
                _isMaximized = false;
        }

        base.WndProc(ref m);
    }

    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_MAXIMIZE = 0xf030;
    private const int SC_RESTORE = 0xf120;
    private bool _isMaximized;
}
8wtpewkr

8wtpewkr2#

可以在最小化窗口上使用GetWindowPlacement(一个本机Win32 API函数),并从WindowPlacement结构读回Flags成员。如果设置了位0x02,则窗口在最小化之前已最大化。

rmbxnbpk

rmbxnbpk3#

if (this.WindowState == FormWindowState.Minimized)....

相关问题