1
當我將窗體的邊框樣式設置爲none時,我不能再將窗口捕捉到屏幕的邊緣。我怎麼能有兩個?如何將無邊框表單對齊到屏幕邊緣?
當我將窗體的邊框樣式設置爲none時,我不能再將窗口捕捉到屏幕的邊緣。我怎麼能有兩個?如何將無邊框表單對齊到屏幕邊緣?
Aero Snap需要一個帶邊框的窗口,沒有後門。您可以使用this post中的代碼模擬對齊。
這與用戶從Aero Snap獲得的交互式反饋相差甚遠。有多種方法可以獲得無邊框窗口,另一種方法是攔截WM_NCCALCSIZE message。 Windows發送的消息使應用程序有機會覆蓋窗口的客戶區大小。這是非常容易做到的,設置FormBorderStyle屬性回縮放和相互這段代碼粘貼到您的Form類:
protected override void WndProc(ref Message m) {
const int WM_NCCALCSIZE = 0x83;
if (m.Msg == WM_NCCALCSIZE && m.WParam.ToInt32() == 1) {
m.Result = new IntPtr(0xF0); // Align client area to all borders
return;
}
base.WndProc(ref m);
}
小心,你可能已經重寫了這個方法使窗口可觀。只需使用此代碼進行更新即可。
這樣的每一次破解都會產生另一個問題,現在窗口的客戶區域會過大。通過邊框的大小和窗口標題更大。解決這個問題非常棘手,Aero關於邊框尺寸存在謊言,您必須確保DPI的自動縮放功能仍能正常工作。設置FormBorderStyle回無,使表看起來像這樣的構造:
public Form1() {
InitializeComponent();
var designSize = this.ClientSize;
this.FormBorderStyle = FormBorderStyle.Sizable;
this.Size = designSize;
}
請記住,即使窗口現在已經邊框樣式標誌開啓,你仍然不會得到一個下拉陰影。很難解決,CS_DROPSHADOW是一樣好。