检查当前最小化窗口在最小化时是处于最大化还是正常状态
问题描述:
如何区分当前最小化窗口是否在此之前最大化,而不是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://*.com/a/1876326/492336但如果窗口在关闭的时间最小化,我不希望它启动时最小化对下一个应用程序的开始(这是目前的答案)。
我想要的是,如果窗口在最小化时已经被最大化,并且如果它在最小化时处于正常状态,则以正常状态开始。
答
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;
}
你可以在里面'WndProc'方法检查的形式已经被最小化,来看看[这里](https://msdn.microsoft.com/en-我们/库/窗/桌面/ ms646360(v = vs.85)的.aspx)。 –