8

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に従っていますが、閉じるときにウィンドウが最小化されていた場合次のアプリケーションの起動時に最小化されて起動します(これが現在の答えです)。

私が望むのは、ウィンドウが最小化されたときに最大化されていた場合は最大化され、最小化されたときに通常の状態にあった場合は通常の状態で開始することです。

4

2 に答える 2

4

WindowStateChangedWinForms はイベントを公開しないため、自分で追跡する必要があります。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;
}
于 2016-09-07T09:33:33.867 に答える