2007年10月27日星期六

How to Resize Windows with No Form border in .NET

如何在.NET调整一个无窗体边缘的窗体?

  在Naio Talk的界面设计部分,由于项目周期的问题以及对Windows系统编程尤其是消息传递机制的不熟悉,选择了.NET来开发。为了使得克服.NET带来的窗体反应迟钝感,打算对Naio Talk的界面经行彻底精心设计。

  其中计划将Naio Talk的主界面的窗体边框去掉。一是减少重绘,二是看上去更加轻薄。

首先设置窗体FormBorderStyle = None;
然后添加如下C#代码即可。

protected override void WndProc(ref Message m)
{base.WndProc(ref m);
switch (m.Msg)
{
case WM_NCHITTEST:
Point vPoint = new Point((int)m.LParam &
0xFFFF,

(int)m.LParam >> 16 &
0xFFFF);

vPoint = PointToClient(vPoint);
if (vPoint.X <= 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPLEFT;
else if (vPoint.Y >= ClientSize.Height -5)
m.Result = (IntPtr)HTBOTTOMLEFT;
else m.Result = (IntPtr)HTLEFT;
else if (vPoint.X >= ClientSize.Width - 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPRIGHT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMRIGHT;
else m.Result = (IntPtr)HTRIGHT;
else if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOP;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOM;
break;
}
}
}

以及如下的成员变量。

const int WM_NCHITTEST = 0x0084;
const int HTLEFT = 10;
const int HTRIGHT = 11;
const int HTTOP = 12;
const int HTTOPLEFT = 13;
const int HTTOPRIGHT = 14;
const int HTBOTTOM = 15;
const int HTBOTTOMLEFT = 0x10;
const int HTBOTTOMRIGHT = 17;



没有评论:

 
(L)1984 - 2007 TONY CHEUNG