博客
关于我
WinForm实现无边框窗体的拖动
阅读量:529 次
发布时间:2019-03-08

本文共 1215 字,大约阅读时间需要 4 分钟。

如何实现无边框窗体并添加拖动效果

在开发中,当我们将FormBorderStyle属性设置为None时,窗口将失去边框,无法通过拖动标题栏进行移动。这在某些场景下可能会影响用户体验。为了实现类似于传统窗口的拖动效果,我们可以利用PictureBox覆盖Form,并在其基础上定义拖动逻辑。

以下是实现无边框拖动效果的常用技术:

  • 使用PInvoke技术调用系统API我们可以调用Windows API函数来实现拖动效果。以下是相关API:
  • [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);

    1. 定义常量在代码中定义以下常量:
    2. 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;

      1. 实现拖动事件处理在PictureBox的MouseDown和MouseMove事件中添加以下逻辑:
      2. 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/

    你可能感兴趣的文章
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 包管理器和 Node.js
    查看>>
    Python 单词字母顺序不变且所有倒排
    查看>>
    python 启动提示IDLE's subprocess didn't make conne...
    查看>>
    python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
    查看>>
    Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
    查看>>
    Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
    查看>>
    python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
    查看>>
    python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>