c#捕獲窗體的最大化最小化按鈕的事件
阿新 • • 發佈:2019-01-09
protected override void OnResize(EventArgs e)
{
if(WindowState == FormWindowState.Maximized)
{
//最大化時所需的操作
MessageBox.Show("max");
}
else if(WindowState == FormWindowState.Minimized)
{
//最小化時所需的操作
MessageBox.Show("min");
}
}
*****但是問題出現了,最大化以後,內部的控制元件不能隨anchar發生變化。。。。。,問題出在哪裡呢?
於是又找到了一些程式碼,如下
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible =false;
}
還有種方法更加直接,過載WndProc:
constint WM_SYSCOMMAND =0x112;
constint SC_CLOSE =0xF060;
constint SC_MINIMIZE =0xF020;
constint SC_MAXIMIZE =0xF030;
protected overridevoid WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
this.Visible =false;
return;
}
}
base.WndProc(ref m);
}
{
if(WindowState == FormWindowState.Maximized)
{
//最大化時所需的操作
MessageBox.Show("max");
}
else if(WindowState == FormWindowState.Minimized)
{
//最小化時所需的操作
MessageBox.Show("min");
}
}
*****但是問題出現了,最大化以後,內部的控制元件不能隨anchar發生變化。。。。。,問題出在哪裡呢?
於是又找到了一些程式碼,如下
雖然Form類沒有提供Minimize的事件,但還是可以通過過載Deactive來實現
當Form失去焦點後,測試WindowState取得Form狀態,若為Minimized既是最小化事件。
本例為最小化後隱藏視窗:
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible =false;
}
還有種方法更加直接,過載WndProc:
constint WM_SYSCOMMAND =0x112;
constint SC_CLOSE =0xF060;
constint SC_MINIMIZE =0xF020;
constint SC_MAXIMIZE =0xF030;
protected
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
this.Visible =false;
return;
}
}
base.WndProc(ref m);
}