我在网上发现了一些代码并将其复制了,到目前为止,我已经能够把一切都弄好了,除了一件事我想让窗体(窗口)完全没有边框.
我正在使用Visual Studio 2013,这个问题只是关于使窗体(窗口)无边界所需的代码.问题是,当你使它无边界时,它不再可调整大小,但是当它有边框时,它可以调整大小.
我知道使用一些代码可以覆盖并实现两者.这是我到目前为止(从其他网站复制).这摆脱了具有程序名称的顶部栏,通过单击并拖动表单使表单可移动,并且它可以调整大小.
唯一的问题是边界仍然存在.我可以添加什么代码,这样边框就会消失?我想保留当前的代码,因为它提供了我需要的几个功能.
顺便说一句,我查看了一些类似主题的旧问题,但没有找到我需要的正确代码.
对于指导我到另一个线程的mod:我在那里尝试了代码,虽然这是一个类似的问题,但这并不是我想要实现的.当我尝试该代码时,我无法单击窗体(窗口)上的任何位置来移动它.另外,它右下角有一个可调整大小的角落,这不是我想要的.我需要在所有角落和侧面调整大小,就像普通窗口一样.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BoxHider { public partial class Form1 : Form { public Form1() { InitializeComponent(); //Next line doesn't seem to be working this.FormBorderStyle = FormBorderStyle.None; } const int WM_NCHITTEST = 0x0084; const int HTCLIENT = 1; const int HTCAPTION = 2; protected override void WndProc(ref Message m) { base.WndProc(ref m); switch (m.Msg) { case WM_NCHITTEST: if (m.Result == (IntPtr)HTCLIENT) { m.Result = (IntPtr)HTCAPTION; } break; } } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= 0x40000; return cp; } } } }
解决方法
试试这个:
public Form1() { InitializeComponent(); this.FormBorderStyle = FormBorderStyle.None; } protected override void WndProc(ref Message m) { const int RESIZE_HANDLE_SIZE = 10; switch (m.Msg) { case 0x0084/*NCHITTEST*/ : base.WndProc(ref m); if ((int)m.Result == 0x01/*HTCLIENT*/) { Point screenPoint = new Point(m.LParam.ToInt32()); Point clientPoint = this.PointToClient(screenPoint); if (clientPoint.Y <= RESIZE_HANDLE_SIZE) { if (clientPoint.X <= RESIZE_HANDLE_SIZE) m.Result = (IntPtr) 13/*HTTOPLEFT*/ ; else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE)) m.Result = (IntPtr) 12/*HTTOP*/ ; else m.Result = (IntPtr) 14/*HTTOPRIGHT*/ ; } else if (clientPoint.Y <= (Size.Height - RESIZE_HANDLE_SIZE)) { if (clientPoint.X <= RESIZE_HANDLE_SIZE) m.Result = (IntPtr) 10/*HTLEFT*/ ; else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE)) m.Result = (IntPtr) 2/*HTCAPTION*/ ; else m.Result = (IntPtr) 11/*HTRIGHT*/ ; } else { if (clientPoint.X <= RESIZE_HANDLE_SIZE) m.Result = (IntPtr) 16/*HTBOTTOMLEFT*/ ; else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE)) m.Result = (IntPtr) 15/*HTBOTTOM*/ ; else m.Result = (IntPtr)17/*HTBOTTOMRIGHT*/ ; } } return; } base.WndProc(ref m); } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= 0x20000; // <--- use 0x20000 return cp; } }
信息来源:
> https://stackoverflow.com/a/19670447/2352507
> Custom Resize Handle in Border-less Form C#
> http://www.csharp411.com/add-drop-shadow-to-borderless-form/