C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置

2023-11-14

这里介绍俩种办法

方法一:直接通过修改窗体位置从而达到移动窗体的效果

方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务栏从而移动窗体

 

 方法一:

        1.定义一个位置信息Point用于存储鼠标位置

       

 private Point mPoint;

        2.给窗体等控件增加MouseDown和MouseMove事件

/// <summary>
        /// 鼠标按下
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            mPoint = new Point(e.X, e.Y);
        }

        /// <summary>
        /// 鼠标移动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
            }
        }

方法二:

   1.引入下面代码 前提需要引入命名空间using System.Runtime.InteropServices

   

[DllImport("user32.dll")]
        public static extern bool ReleaseCapture();

        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

        private const int VM_NCLBUTTONDOWN = 0XA1;//定义鼠标左键按下
        private const int HTCAPTION = 2;

   2.增加鼠标按下事件发送消息,让系统误以为按下是标题栏

  

/// <summary>
        /// 鼠标按下
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            //为当前应用程序释放鼠标捕获
            ReleaseCapture();
            //发送消息 让系统误以为在标题栏上按下鼠标
            SendMessage((IntPtr)this.Handle, VM_NCLBUTTONDOWN, HTCAPTION, 0);
        }

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置 的相关文章

  • 如何创建指向目录的链接

    本文翻译自 How to create a link to a directory closed How to create a link xxx to home jake doc test 2000 something 如何创建到 hom
  • 史上最全

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 BEV综述 获取论文 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 1摘要 以视觉为中心的俯视图 BE
  • 【HBZ分享】Redis如何与Mysql做数据同步,有几种方法?

    1 Mysql查完数据 再同步写入到Redis中 缺点1 会对接口造成延迟 因为同步写入redis本身就有延迟 并且还要做重试 如果redis写入失败 还需要重试 那就更费时间了 缺点2 不解耦 如果redis崩了 那直接卡线程了 缺点3
  • Java:简述try-catch-finally中return返回

    Java 简述try catch finally中return返回 Java 详解Java中的异常 Error与Exception Java 简述Java中的自定义异常 Java 简述throw throws异常抛出 Java 简述try
  • 字符串:找第一个只出现一次的字符(python实现)

    题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 输入 一个字符串 长度小于100000 输出 输出第一个仅出现一次的字符 若没有则输出no 样例输入 abcabd 样例输出 c 思路1 统计各个字符出现的次数 然后
  • js Base64加密

    base64加密开始 var keyStr ABCDEFGHIJKLMNOP QRSTUVWXYZabcdef ghijklmnopqrstuv wxyz0123456789 function encode64 input var outp
  • 基于springboot & vue-admin-template 框架下的前后端分离开发,《文件上传》业务逻辑与el-upload组件详解,静态路径与动态路径

    springBoot vue admin template框架下的文件传输 我想实现的内容 前端部分代码的实现 el upload的学习与拓展 文件的upload与download 文件的show 回显 后端部分代码的实现 upload接口
  • Mysql中IFNULL , ISNULL, NULLIF这三个函数的相爱相杀

    IFNULL expr1 expr2 用法 假如expr1不为NULL 则 IFNULL 的返回值为expr1 否则其返回值为 expr2 IFNULL 的返回值是数字或是字符串 具体情况取决于其所使用的语境 以实际例子查看 SELECT
  • Charles软件使用

    Charles是通过将自己设置成系统的网络访问代理服务器 使得所有的网络访问请求都通过它来完成 从而实现了网络封包的截取和分析 安装Charles 去 Charles 的官方网站 http www charlesproxy com 下载最新
  • linux qt 动态链接库 静态链接库 学习笔记

    转自 http hi baidu com codeworkman item fa434498290bd38e591461d6 hello h ifndef HELLO H define HELLO H extern C void hello
  • Python中的面向对象编程的一些基本概念总结

    一 一些专有词汇的定义 面对对象编程 OOP object oriented programming 是一种程序设计范型 同时也是一种程序开发的方法 实现OOP的程序希望能够在程序中包含各种独立而又相互调用的对象 没一个对象又都应该能够接受
  • 转载Faster-rcnn理解

    文章转自https blog csdn net Lin xiaoyi article details 78214874 仅供方便自己学习 如有侵权请联系删除 效果图 作者 提到目标检测 就不得不RBG大神 该大神在读博士的时候就因为dpm获
  • CSDN第一篇博客,找工作日记第一篇

    今天结束了UC公司的几轮面试 不确定能否拿到offer 但回顾近几天的校招情况 比起十一之前不顺利的过程来说的确让人欣慰了很多 最近考了很多公司的笔试 也面过4399 UC TP LINK等等 峰回路转地明天还要参加百度的面试 当然还有菲音
  • C#程序演示Console.Write()和Console.WriteLine()的示例

    Console Write and Console WriteLine methods are used to print the text values on the Console Console Write prints only t
  • Postgresql查询每组的前N条记录

    Postgresql以指定字段分组后 查询每组的前N条记录 主函数 ROW NUMBER OVER PARTITION BY 省份名称 地市名称 ORDER BY arpu desc dou DESC AS row id 在原有数据表的基础

随机推荐

  • ORA-01157报错"cannot identify/lock data file"

    sqlplus以管理员方式接入数据库 启动时出现报错 如下 gt sqlplus as sysdba SQL gt startup ORA 01157 cannot identify lock data file 8 see DBWR tr
  • 数据结构:数组模拟队列

    实现一个队列 队列初始为空 支持四种操作 push x 向队尾插入一个数 x pop 从队头弹出一个数 empty 判断队列是否为空 query 查询队头元素 数组模拟队列 队列 先进先出 include
  • mysql注入语句说明

    判断闭合id 1 页面正常 id 1 页面不正常 id 1 页面恢复正常说明闭合是 id 1 页面正常 id 1 页面不正常 id 1 页面还是不正常说明闭合不是 如果这时id 1 页面恢复正常 说明闭合是 id 1 and 1 1id 1
  • 为何实现不了定时器DMA Burst传输?

    有人使用STM32F4系列开发产品 程序运行过程中需要不时地对外输出一串驱动脉冲 并要求这几串脉冲的频率可变 占空比固定 他想到使用基于STM32定时器的DMA BURST传输 具体点说 他期望不时地通过TIM3的CH1输出一串频率可变 占
  • 二叉树的基本概念及性质

    文章目录 一 基本概念 二 二叉树的种类 二叉树 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 三 二叉树的性质 性质一 性质二 性质三 性质四 性质五 一 基本概念 树是 n 个结点的有限集 在任意一颗非空树中 1 有且仅有一个特定的
  • window修改本地域名

    C Windows System32 drivers etc 127 0 0 1 bbs itcast com 127 0 0 1 mail itcast com 127 0 0 1 cas itcast cn 127 0 0 1 www
  • 简单理解promise

    promise是ES6为我们提供解决 回调地狱 的一种方法 能让代码的可读性更高 先看一个最简单的例子 new Promise function resolve reject executor 首先我们先new一个 Promise 对象时
  • 显示搜索dota2协调服务器,搜索dota2游戏协调服务器中【操作方式】

    喜欢使用电脑的小伙伴们一般都会遇到win7系统搜索dota2游戏协调服务器中的问题 突然遇到win7系统搜索dota2游戏协调服务器中的问题就不知道该怎么办了 其实win7系统搜索dota2游戏协调服务器中的解决方法非常简单 按照 1 DO
  • Hive 任务限制同时运行的任务数量的配置

    Hive任务的并发控制 指同时运行的 container 的数量 防止先提交的任务占用全部的队列资源 导致后来提交的任务无法申请到足够的资源 Hive 任务的并发控制 和使用的引擎相关 MapReduce MR 引擎 Map 任务 mr 引
  • 微信收钱的盒子服务器老是断开,微信文件已过期或被清理的终极解决办法

    工作中总是有同事习惯用微信传文件 当我们沿着微信对话爬楼找历史文件时 总会收到让人绝望的提醒 文件已过期或被清理 这里有个抢救办法 你不妨一试 如果文件当时是通过电脑发的 可以在 此电脑 文档 WeChat File 中找找 如果没有就真是
  • 基础数据结构之单循环链表

    文章目录 一 补充上节课的知识点 单链表和顺序表的区别 顺序表和单链表的使用场景分析 二 认识单循环链表 1 将单循环链表的增删改查用画图方式展现出来 2 用代码实现单循环链表 一 补充上节课的知识点 单链表和顺序表的区别 顺序表和单链表的
  • Qt中以qRegister开头的几个函数的用法说明

    目录 1 前言 2 qRegisterMetaTypeStreamOperators 2 1 函数功能简述 2 2 用法举例1 3 qRegisterMetaType 1 前言 Qt通过qRegister开头的函数和Q DECLARE开头的
  • 深度学习知识点一

    1 说说卷积和全连接网络的区别 2 什么是感受野呢 3 深度学习的 深度 是不是一昧的增加深度就好了吗 网络是否越深越好 4 减少过拟合的手段 5 简单的说一下YOLO V1 6 MobileNet 用到的模型压缩手段是什么 7 简单的说一
  • Java集合面试题 52道

    集合容器概述 什么是集合 集合就是一个放数据的容器 准确的说是放数据对象引用的容器 集合类存放的都是对象的引用 而不是对象的本身 集合类型主要有3种 set 集 list 列表 和map 映射 集合的特点 集合的特点主要有如下两点 集合用于
  • C51单片机--IO口应用

    流水灯 文章目录 流水灯 前言 一 D1到D8依次点亮 二 读入开关K1 K4的状态 按下对应开关 控制相应D1 D4灯亮 三 流水灯 功能 LED从左边起D1 D3亮 并闪烁3次 然后是D2 D4亮 并闪烁3次 然后D3 D5亮 闪烁3次
  • SQL面试题之区间合并问题

    目录 0 需求 1 数据准备 2 数据分析 2 小结 0 需求 给定多个时间段 每个时间段分为开始时间 结束时间 将相互重叠的多个时间段合并为一个区间 数据 id 开始时间 结束时间 1 12 15 2 57 58 3 29 32 4 30
  • JDK 监控和故障处理工具

    JDK 监控和故障处理工具总结 JDK 命令行工具 这些命令在 JDK 安装目录下的 bin 目录下 jps JVM Process Status 类似 UNIX 的 ps 命令 用户查看所有 Java 进程的启动类 传入参数和 Java
  • About the MariaDB Java Client

    https kb askmonty org en about the mariadb java client The MariaDB Client Library for Java Applications is used to conne
  • 配置systemctl命令tab自动补全 【转】

    文章来源 配置systemctl命令tab自动补全 系统版本 root test uname r 3 10 0 229 el7 x86 64 root test cat etc redhat release CentOS Linux rel
  • C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置

    这里介绍俩种办法 方法一 直接通过修改窗体位置从而达到移动窗体的效果 方法二 直接伪装发送单击任务栏消息 让应用程序误以为单击任务栏从而移动窗体 方法一 1 定义一个位置信息Point用于存储鼠标位置 private Point mPoin