WindowsForm移动一个没有标题栏的窗口的方法

在WinForm程序中,要移动没有标题栏的窗口,基本的实现思路是监听需要拖动窗口内的控件的鼠标事件,然后将鼠标位置发送给窗口进行相应的位移就可以了。通过借用Windows API也可以很容易实现这一点,比如像下面这样。

public class Win32Api
{
  public const int WM_SYSCOMMAND = 0x112;
  public const int SC_DRAGMOVE = 0xF012;

  [DllImport("user32.Dll", EntryPoint = "ReleaseCapture")]
  public extern static void ReleaseCapture(); // 鼠标捕获
  [DllImport("user32.Dll", EntryPoint = "SendMessage")]
  public extern static void SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam); // 将消息发送给指定的窗口
}

private void pnlHeader_MouseDown(object sender, MouseEventArgs e)
{
  Win32Api.ReleaseCapture();
  Win32Api.SendMessage(this.Handle, Win32Api.WM_SYSCOMMAND, Win32Api.SC_DRAGMOVE, 0);
}

当然,你还可以向这样向窗口发送消息,来实现拖动自定义标题栏移动窗口

public const int WM_NCLBUTTONDOWN = 0x00A1;
public const int HTCAPTION = 2;

private void pnlHeader_MouseDown(object sender, MouseEventArgs e)
{
  if (e.Button == MouseButtons.Left)
  {
    // 释放控件已捕获的鼠标
    pnlHeader.Capture = false;

    // 创建并发送WM_NCLBUTTONDOWN消息
    Message msg =
      Message.Create(this.Handle, Win32Api.WM_NCLBUTTONDOWN,
        new IntPtr(Win32Api.HTCAPTION), IntPtr.Zero);
    this.DefWndProc(ref msg);
  }
}

以上就是WindowsForm移动一个没有标题栏的窗口的方法的详细内容,更多关于WindowsForm 移动窗口的资料请关注我们其它相关文章!

(0)

相关推荐

  • WindowsForm实现警告消息框的实例代码

    警告消息框主要是用来向用户户展示诸如警告.异常.完成和提示消息.一般实现的效果就是从系统窗口右下角弹出,然后加上些简单的显示和消失的动画. 创建警告框窗口 首先我们创建一个警告框窗口(Form),将窗口设置为无边框(FormBoderStyle=None),添加上图片和内容显示控件 创建好警告框后,我们先让他能够从窗口右下角显示出来, public partial class AlertMessageForm : Form { public AlertMessageForm() { Initia

  • 如何让WindowsForm缩小到系统匣过程详解

    如何让windowsForm能像MSN一样缩小后会跑到右下方的系统匣内, 只要利用NotifyIcon就可以做到相同的功能,MSDN NotifyIcon组件说明 首先先开启一个windowsForm项目,在工具栏将NotifyIcon拉到windowsForm上. 接着先为NotifyIcon指定Icon和Text,就是在系统匣会出现的小图和鼠标移过去时出现的文字. 执行结果 如果要在窗口缩小时,只显示在系统匣显示, 反之则变成只显示在工作列,就必须要在Form的SizeChanged事件做控

  • 如何用WindowsForm给窗口添加一些简单的动画效果

    在显示或者隐藏窗口的时候,可以利用Windows API中的AnimateWindow函数实现一些特殊的效果.主要的动画类型有四种:滚动.幻灯片.折叠或展开和alpha混合渐变. 窗口动画效果 首先定义动画工具类,引入AnimateWindow函数. public class WindowsEffects { public const int AW_ACTIVATE = 0x00020000; // 激活窗口.不要在AW_HIDE中使用此值. public const int AW_BLEND

  • WindowsForm实现TextBox占位符Placeholder提示功能

    在WinForm程序中,实现TextBox文本输入框占位符的方式也很多,最常用的是方式基于Windows Api SendMessage函数发送EM_SETCUEBANNER消息,或者通过TextBox自带的焦点事件处理. SendMessage函数实现 创建一个继承TextBox的ZhmTextBox输入框控件,新增Placeholder属性,在Placeholder的set方法中发送EM_SETCUEBANNER消息 public class ZhmTextBox: TextBox { pr

  • 3种方法实现WindowsForm切换窗口

    在Windows Form平台下实现窗口跳转,常见的有以下几种方式,比如通过Show/ShowDialog方法显示新的窗口,通过多文档界面(MDI)在父窗口中加载子窗口,或者是通关过在窗口中动态加载自定义控件,比如通过将窗口中的Panel控件作为容器,将一些自定义元素作为视图界面控件,动态加载到Panel控件中.下面我们将简单介绍这几种方式 Show/ShowDialog 通过这两种方法可以很简单的实现窗口跳转, Home home = new Home(); home.Show(); Home

  • C# WindowsForm程序同时启动多个窗口类

    C# WindowsForm程序同时启动多个窗口类,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MVCProject { /// <summary> /// 多窗口同时启动类 /// <remarks>继承A

  • WindowsForm移动一个没有标题栏的窗口的方法

    在WinForm程序中,要移动没有标题栏的窗口,基本的实现思路是监听需要拖动窗口内的控件的鼠标事件,然后将鼠标位置发送给窗口进行相应的位移就可以了.通过借用Windows API也可以很容易实现这一点,比如像下面这样. public class Win32Api { public const int WM_SYSCOMMAND = 0x112; public const int SC_DRAGMOVE = 0xF012; [DllImport("user32.Dll", EntryPo

  • 创建一个在标题栏中没有“关闭”按钮的 HTA

    问: 您好,脚本专家!如何创建一个在标题栏中没有"关闭"按钮的 HTA? -- AK 答: 您好,AK.您知道,您的问题让我们陷入了道德和伦理的窘境.毕竟,假如我们给出此问题的答案:这个世界就有可能突然被大量无法关闭的 HTA 所淹没.在我们的眼前会出现这样一幅画面:无法关闭又不能停止的 HTA 疯狂地横扫整个陆地,并吞食沿途的所有系统资源.而我们脚本专家,将要对此负责.我们只是觉得无法在良心上背负这样一条的罪责. 但是,在我们的的良心上再多加一条罪责又会有什么不同呢?明确这一点后,我

  • javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法

    本文实例讲述了javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法.分享给大家供大家参考.具体分析如下: 这里点击按钮后,弹出一个可关闭的层窗口,随之网页背景变灰,在QQ网站上经常会看到QQ登录的效果,就和这个很类似,代码段基于JavaScript,根据你的情况使用,有时候是用CSS完成的这种功能. <html> <head> <meta http-equiv="Content-Type" content="text/htm

  • 基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑

    当需要实现如下图操作,点击服务评分,出现一个服务评分窗口用来填入相关表单信息 可是这会让我们打开服务评分界面时还可以点击body主界面中的购物车等链接,这是不对的,因此我们可以使用层叠样式表来指定外围的div的z-index低于当前服务评分表单页面,不能被点击,如下: /* 定义一个div用于覆盖整个页面,这个div的z-index大于body,小于服务评分div */ #temp{ background-color: #000; opacity: 0.3; width: 100%; heigh

  • Joomla实现组件中弹出一个模式(modal)窗口的方法

    本文实例讲述了Joomla实现组件中弹出一个模式(modal)窗口的方法.分享给大家供大家参考,具体如下: 最关键的JS在 /media/system/js/modal.js .有以下两种方式都可以实现,修改的都是扩展组件的模板文件default.php. 方式一: <?php JHTML::_('behavior.modal', 'a.modal');?> <a rel="{handler: 'iframe', size: {x: 570, y: 400}}" hr

  • 简述vue路由打开一个新的窗口的方法

    简单说一下vue路由如何打开一个新的窗口 1.router-link标签 在vue的官方文档中 看到这大家应该会想,既然router-link不支持target="_blank"属性,那我们该怎么用router-link打开一个新的窗口呢?别急,继续往下看~ 文档中还有一处描述 router-link添加tag="li"属性后,居然可以变成li标签渲染出来,真特么神奇哈,那可不可以写成tag="a",从而去替代a标签呢?我们尝试着写一哈 <

  • python3 tkinter实现点击一个按钮跳出另一个窗口的方法

    如下所示: #-*- encoding:utf-8 -*- from tkinter import * root = Tk() def create(): top = Toplevel() top.title('Python') v1 = StringVar() e1 = Entry(top,textvariable=v1,width=10) e1.grid(row=1,column=0,padx=1,pady=1) Button(top, text='出现2级').grid(row=1,col

  • 运行bat时隐藏cmd窗口的方法(bat隐藏窗口 隐藏运行bat文件)

    这里我们简单的整理下常用方法,方便大家使用.都是通过vbscript的代码.运行bat时隐藏cmd窗口的方法 可以编辑一个vbs脚本,在其中以隐藏窗口运行批处理程序. 复制代码 代码如下: Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c 批处理程序名",vbhide 将上面代码拷贝到记事本中,保存为"runbat.vbs"或者其它的名字(扩展名必须是.vbs),然后点击运行生成的脚本ru

  • python实现根据窗口标题调用窗口的方法

    本文实例讲述了python实现根据窗口标题调用窗口的方法.分享给大家供大家参考.具体分析如下: 当你知道一个windows窗口的标题后,可以用下面的代码调用窗口,甚至向窗口内写入内容. #-*-coding:utf-8-*- import win32gui,win32con #下面的是窗口的标题名称,这样是一定错的,但在控制台就可以正常使用 #写在文件里要用U编码 a=u"jb51.net" dlg=win32gui.FindWindow(None,a) //用控件的ID取得控件的句柄

随机推荐