通常點擊任務欄上的圖標時,對應窗體實現“最小化或者恢復”的效果。但是在做最小化到托盤時,不希望點擊任務欄圖標時最小化到托盤,即希望攔截了這些效果(不允許:通過點擊任務欄上的圖標,實現“最小化或者恢復”的效果);
具體實現代碼如下:
#region 區別 任務欄中點擊窗體圖標(最小化|恢復)與點擊最小化按鈕 private int WM_SYSCOMMAND = 0x112; private long SC_MINIMIZE = 0xF020; protected override void WndProc(ref Message m) { if (m.Msg == WM_SYSCOMMAND) { if (m.WParam.ToInt64() == SC_MINIMIZE && m.LParam.ToString() != "0") //m.LParam.ToString() != "0" 表示任務欄中點擊窗體圖標(最小化|恢復) { HideMainForm(); //這里直接將窗體圖盤化//this.isMinBoxHited = true; //點擊的是最小化按鈕 通過中間變量不可行 return; } } base.WndProc(ref m); } #endregion
如果想實現其他效果可以參考如下:
private int WM_SYSCOMMAND = 0x112; private long SC_MAXIMIZE = 0xF030; private long SC_MINIMIZE = 0xF020; private long SC_CLOSE = 0xF060; protected override void WndProc(ref Message m) { if (m.Msg == WM_SYSCOMMAND) { if (m.WParam.ToInt64() == SC_MAXIMIZE) { //MessageBox.Show("MAXIMIZE "); return; } if (m.WParam.ToInt64() == SC_MINIMIZE) { //MessageBox.Show("MINIMIZE "); return; } if (m.WParam.ToInt64() == SC_CLOSE) { //MessageBox.Show("CLOSE "); return; } } base.WndProc(ref m); }
