C#設置winform窗口無法移動

在最近的一實驗中,遇到設置窗口無法移動的問題。

首先是考慮從窗口屬性中直接進行設置:

1,窗口屬性中有locked屬性,設置爲true。

(在自己進行編碼的時候並沒能找到這個屬性,貌似只能在窗口設計時進行設置,故此方法無可控性)

2,窗口屬性中有FormBorderStyle屬性,設置爲none;

或者在代碼中設置:Form1.ActiveForm.FormBorderStyle = FormBorderStyle.None;

此時爲無邊框風格,窗口顯灰,不可縮放不可移動。

然後可以考慮對窗口的位置進行記錄,讓其位置不可改變即可:

3,用一個point結構體記錄窗口位置,在窗口的move或change事件裏使其位置不變

private Point point;
在相應的位置設置窗口的初始位置
point=this.location
private void Form1_Move(object sender, EventArgs e)
        {
            this.Location = point;
        }
但是這裏存在一個很不友好的問題
就是窗口在拖拽之後會瞬間返回原來的位置。

4,通過重載消息處理實現。重寫窗口過程函數(WndProc),處理窗口消息 :
設置一bool變量lockframe

protected override void WndProc(ref   System.Windows.Forms.Message m)
        {
            if (lockframe)
            {
                if (m.Msg != 0x0112 && m.WParam != (IntPtr)0xF012)
                {
                    base.WndProc(ref   m);
                }
            }
            else
                base.WndProc(ref   m);
        }


5,自己寫一個hook函數,監聽事件並處理;

6,隱藏窗口的標題欄,然後自己做一個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章