2015-05-24 115 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是一样好。

相关问题