本文共 1215 字,大约阅读时间需要 4 分钟。
如何实现无边框窗体并添加拖动效果
在开发中,当我们将FormBorderStyle属性设置为None时,窗口将失去边框,无法通过拖动标题栏进行移动。这在某些场景下可能会影响用户体验。为了实现类似于传统窗口的拖动效果,我们可以利用PictureBox覆盖Form,并在其基础上定义拖动逻辑。
以下是实现无边框拖动效果的常用技术:
[DllImport("user32.dll")]public static extern bool ReleaseCapture();
[DllImport("user32.dll")]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
internal static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
public const int WM_SYSCOMMAND = 0x0112;public const int SC_MOVE = 0xF010;public const int HTCAPTION = 0x0002;
public const int WM_NCLBUTTONDOWN = 0xA1;public const int HT_CAPTION = 0x2;public const int MOUSEWHEEL = 0x020A;
private void pictureBoxBackground_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){ReleaseCapture();SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);}}
private void pictureBoxBackground_MouseMove(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){ReleaseCapture();SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);}}
通过以上代码,我们可以实现一个可以拖动的无边框窗体。拖动逻辑通过调用系统API实现,确保了良好的用户体验。
转载地址:http://bngnz.baihongyu.com/