1. 程式人生 > >c#捕獲窗體的最大化最小化按鈕的事件

c#捕獲窗體的最大化最小化按鈕的事件

        protected override void OnResize(EventArgs e) 
        { 
            if(WindowState == FormWindowState.Maximized) 
            { 
                //最大化時所需的操作 
                MessageBox.Show("max");
            } 
            else if(WindowState == FormWindowState.Minimized) 
            { 
                //最小化時所需的操作
                MessageBox.Show("min");
            } 
        } 

*****但是問題出現了,最大化以後,內部的控制元件不能隨anchar發生變化。。。。。,問題出在哪裡呢?
於是又找到了一些程式碼,如下

雖然Form類沒有提供Minimize的事件,但還是可以通過過載Deactive來實現
當Form失去焦點後,測試WindowState取得Form狀態,若為Minimized既是最小化事件。
本例為最小化後隱藏視窗:

None.gifprivatevoid Form1_Deactivate(object sender, EventArgs e)
ExpandedBlockStart.gif        
{
InBlock.gif            
if (this.WindowState == FormWindowState.Minimized)
InBlock.gif                
this.Visible =false;
ExpandedBlockEnd.gif        }

還有種方法更加直接,過載WndProc:

None.gifconstint WM_SYSCOMMAND =0x112;
None.gif
constint SC_CLOSE =0xF060;
None.gif
constint SC_MINIMIZE =0xF020;
None.gif
constint SC_MAXIMIZE =0xF030;
None.gif
protected
overridevoid WndProc(ref Message m)
ExpandedBlockStart.gif
{
InBlock.gif    
if (m.Msg == WM_SYSCOMMAND)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
if (m.WParam.ToInt32() == SC_MINIMIZE)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
this.Visible =false;
InBlock.gif            
return;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif    
base.WndProc(ref m);
ExpandedBlockEnd.gif}