在最近的一實驗中,遇到設置窗口無法移動的問題。
首先是考慮從窗口屬性中直接進行設置:
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,隱藏窗口的標題欄,然後自己做一個。