窗体去边框后移动

简介:

窗体的FormBorderStyle属性为None时,可以使用鼠标移动窗体。

 

1.介绍

属性
FormBorderStyle

 

获取或设置窗体的边框样式
None无边框。
FixedSingle固定的单行边框。
Fixed3D固定的三维边框。
FixedDialog固定的对话框样式的粗边框。
Sizable可调整大小的边框。
FixedToolWindow不可调整大小的工具窗口边框。 工具窗口不会显示在任务栏中也不会显示在当用户按 Alt+Tab 时出现的窗口中。 尽管指定 FixedToolWindow 的窗体通常不显示在任务栏中,还是必须确保 ShowInTaskbar 属性设置为 false,因为其默认值为 true。
SizableToolWindow可调整大小的工具窗口边框。 工具窗口不会显示在任务栏中也不会显示在当用户按 Alt+Tab 时出现的窗口中。
事件
MouseDown

当鼠标指针位于控件上并按下鼠标键时发生。

 

方法
ReleaseCapture

鼠标捕获。如果控件当前具有鼠标捕获,释放访问。 否则,此功能不起作用。

SendMessage

向消息窗口发送一条消息,并一直等到 WndProc 方法处理此消息。

PostMessage

在与创建指定窗口的线程关联的消息队列中放置(发布)消息,并返回消息,而无需等待线程处理该消息。要在与线程关联的消息队列中发布消息,请使用PostThreadMessage函数。
常量
名称数值含义
WM_SYSCOMMAND0x0112当用户从窗口菜单选择一个命令或当用户选择最大化按钮,最小化按钮,复原按钮或关闭按钮时,一个窗口将会接收该消息。

SC_MOVE

0xF010移动窗口
HTCAPTION 0x0002表示鼠标在窗口标题栏时的系统信息

 

 

2.使用

  1. 通过窗体的MouseDown事件。
  2. user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。
  3. PostMessage返回值是true,SendMessage是false。第四个变量数值无特殊要求。
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            //第一种
            bool result = ReleaseCapture() && PostMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            第二种
            //bool result = ReleaseCapture() && SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);      
        }

        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
        [DllImport("user32.dll")]
        public static extern bool PostMessage(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;  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值