WindowsForm移动一个没有标题栏的窗口的方法
程序员文章站
2022-04-29 14:33:04
在winform程序中,要移动没有标题栏的窗口,基本的实现思路是监听需要拖动窗口内的控件的鼠标事件,然后将鼠标位置发送给窗口进行相应的位移就可以了。通过借用windows api也可以很容易实现这一点...
在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 移动窗口的资料请关注其它相关文章!
上一篇: C#事件管理器如何清空所有监听详解
下一篇: C# 实现俄罗斯方块(附源码)
推荐阅读
-
解决Fedora14下eclipse进行android开发,ibus提示没有输入窗口的方法详解
-
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
-
PHP检测一个数组有没有定义的方法步骤
-
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
-
简述vue路由打开一个新的窗口的方法
-
C#中窗口关闭时没有取消事件订阅导致事件重复执行的解决方法
-
把火狐浏览器标签页独立成一个新窗口的设置方法
-
双击任何一个文件夹都会新建一个窗口打开的解决方法
-
WindowsForm移动一个没有标题栏的窗口的方法
-
在同一个类中调用另一个方法没有触发 Spring AOP 的问题