2015-05-24 151 views

回答

1

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是一樣好。

相關問題