1. 重写WndProc

protected override void WndProc(ref Message m)
{       const int WM_NCHITTEST = 0x84;const int HTCLIENT = 0x01;const int HTCAPTION = 0x02;if (m.Msg == WM_NCHITTEST){this.DefWndProc(ref m);if (m.Result.ToInt32() == HTCLIENT)m.Result = new IntPtr(HTCAPTION);elsebase.WndProc(ref m);}else{base.WndProc(ref m);}
}

2.创建消息

private const int WM_NCLBUTTONDOWN = 0x00A1;
private const int WM_NCHITTEST = 0x84;
private const int HT_CAPTION = 0x2;
private const int HT_CLIENT = 0x1;private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{//this.Capture = false;pictureBox1.Capture = false;Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero);WndProc(ref   msg);
} 

3.调用API代码

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);public const int WM_SYSCOMMAND = 0x0112;public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;//在窗体的_MouseDown中加入如下代码:
如:
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}

WinForm 禁止最大化、最小化、双击标题栏、双击图标等操作

protected override void WndProc(ref Message m)
{            if (m.Msg==0x112){switch ((int) m.WParam){//禁止双击标题栏关闭窗体case 0xF063:case 0xF093:m.WParam = IntPtr.Zero;break;//禁止拖拽标题栏还原窗体case 0xF012:case 0xF010:m.WParam = IntPtr.Zero;break;//禁止双击标题栏case 0xf122:m.WParam = IntPtr.Zero;break;//禁止关闭按钮case 0xF060:m.WParam = IntPtr.Zero;break;//禁止最大化按钮case 0xf020:m.WParam = IntPtr.Zero;break;//禁止最小化按钮case 0xf030:m.WParam = IntPtr.Zero;break;//禁止还原按钮case 0xf120:m.WParam = IntPtr.Zero;break;}}            base.WndProc(ref m);
}

转载于:https://www.cnblogs.com/lifelog/p/3604228.html

【转】【C#】无边框窗体移动的三种方法相关推荐

  1. C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中,常常为了美观需要设置窗体属性"FormBorderStyle"(窗体边框和标题栏外观)为None无标题窗口.此时隐藏标题的窗口怎样实现移动呢?我根据自己的项目从 ...

  2. excel单元格斜线_做个高级表格,绘制斜线表头的三种方法,看你可以学会几种?...

    工作中做表格经常会遇到需要绘制斜线表头的时候,今天我们具体说下斜线表头的绘制方法 先看下效果图 绘制斜线表头方法一 1. 选中单元格-------插入------形状-----直线-----在单元格里 ...

  3. 拖动无边框窗体(VB6代码)

    简单代码片段,记录一下备用. Option Explicit Dim mX As Long, mY As Long Private Sub Form_MouseDown(Button As Integ ...

  4. 无边框窗体和用户控件以及权限

    无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [Dl ...

  5. 再谈无边框窗体的操作

    本文介绍操作无边框窗体的其他几个方面的技巧. 设置浮动菜单 通常情况下,在无边框窗体中不能设置菜单.如果在无边框窗体中设置了菜单,运行时窗体上就会出现标题栏.那么,是否在无边框窗体中就不能使用菜单了呢 ...

  6. 无边框窗体移动的方法

    文章目录 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 当我们把窗体设置为无边框后,会发现用鼠标拖动窗体时是没有反应的,我们需要在窗体 ...

  7. 通过调用API函数实现的无边框窗体的拖拽,比判断坐标更快捷

    在winform程序中,有时会选择边框设计会none,但是这样就不能拖拽窗体移动 解决方案有二: 1,判断坐标控制拖拽 2.利用API函数, 下面介绍利用API函数,方便,快捷 #region 移动无 ...

  8. 01.WPF中制作无边框窗体

    [引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBor ...

  9. 【C#】使用DWM实现无边框窗体阴影或全透窗体

    1.无边框窗体阴影,win7(需要开启Aero效果)及以上系统 public class LdwmForm : Form{public LdwmForm(){Initialize();}/// < ...

最新文章

  1. Linux(CentOS 7_x64位)系统下安装Xmgrace
  2. Java 接受reactjs数据_[Java教程]react.js 父子组件数据绑定实时通讯
  3. 模块计算机类型x64与目标计算机类型X86冲突
  4. 19-7-15学习笔记
  5. C语言长度为0的数组
  6. Dalvik虚拟机简要介绍和学习计划
  7. 设计java application程序_下面哪些步骤是Java Application程序的建立及运行的步骤( )...
  8. Codeforces Round #327 div2
  9. 如何快速学习PLC编程
  10. java实现dex转jar_dex转jar工具
  11. Freeswitch的Proxy(代理转发)模式和Bypass(旁路)模式的正确配置
  12. 我国期货市场发展潜力和方向
  13. 异构网络互联;路由与转发;SDN基本概念;拥塞控制
  14. 服务器添加账号失败是怎么回事啊,outlook添加新账户时失败,该怎么办
  15. html个人中心布局,html5前端开发笔记-个人中心
  16. AAC Advanced Audio Coding(高级音频编码)资料整理
  17. MBA案例分析(人员培训二)
  18. 金融工资和计算机工资待遇,【成都京东金融工资】计算机待遇-看准网
  19. IEEE SA 会员注册步骤
  20. k8s使用(kubernetes)

热门文章

  1. vue 高阶面试题_高级Web前端工程师面试之Vue问题汇总解析
  2. python数据挖掘主要特点_【Python数据挖掘】第六篇--特征工程
  3. 如何给安卓应用添加权限
  4. python面试总结 博客园_python面试题总结
  5. 为什么有时优盘是只读模式_为什么安装了Paragon NTFS磁盘还是只读,不能进行操作?...
  6. python 红黑树_python学习笔记|红黑树(性质与插入)
  7. RichTextBox读写数据库
  8. 没事抽空学——常用界面组件属性
  9. 大数据处理时用到maven的repository
  10. mysql事务的四大特性与简单运用