zoukankan      html  css  js  c++  java
  • Windows API实现移动窗体

    在我们自定义窗体的时候,实现鼠标点击拖动标题栏移动窗体是必要的,而用Windows API来实现这一功能相对来说最简单,需要用到的API函数有两个:

    1:BOOL WINAPI ReleaseCapture(void);

    2:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)

    第二个方法是向窗体发送移动的命令,主要解释一下第一个方法。

    ReleaseCapture官方的解释是释放窗体的鼠标捕获,并且恢复鼠标接收指令,这一步是为了接下来根据鼠标来移动窗体做准备,关键的是下一步,ReleaseCapture让窗体捕获所有的鼠标输入(无论鼠标在哪里),只有这样我们移动鼠标的时候窗体才会跟着一直移动,直到再次对鼠标进行操作。

    最后,已C#语言为例,实现窗体移动:

        //****************************************************
        //创建人:xxx
        //创建时间:2016-09-23
        //功能说明:该类是一个重新绘制的窗体
        //****************************************************
        public partial class MyForm : Form
        {
            /// <summary>
            /// 释放鼠标捕获
             /// </summary>
            /// <returns>成功返回true,失败返回false</returns>
            [DllImport("user32.dll")]
            public static extern Boolean ReleaseCapture();
    
            /// <summary>
            /// 向窗体发送消息
             /// </summary>
            /// <param name="hwnd">窗体的句柄</param>
            /// <param name="wMsg">消息号</param>
            /// <param name="wParam">消息的附加信息</param>
            /// <param name="lParam">消息的附加信息</param>
            /// <returns>成功返回true,失败返回false</returns>
            [DllImport("user32.dll")]
            public static extern Boolean SendMessage(IntPtr hwnd, Int32 wMsg, Int32 wParam, Int32 lParam);
    
            public const Int32 WM_SYSCOMMAND = 0x0112;
    
            public const Int32 SC_MOVE = 0xF010;
    
            public const Int32 HTCAPTION = 0x0002;
    
            /// <summary>
            /// 窗体的鼠标点击事件委托
             /// </summary>
            private void panelTitle_MouseDown(object sender, MouseEventArgs e)
            {
                ReleaseCapture();
                SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
    }
  • 相关阅读:
    iOS取消按钮点击时的动画效果
    iOS实现简书和知乎的上滑隐藏导航栏下拉显示导航栏效果
    idea添加Jetty时提示JMX module is not included
    人的差别在于业余时间,而一个人的命运决定于晚上8点到10点之间
    如果做好一个出色的程序员
    阅读的技巧
    JQuery返回布尔值Is()方法.条件判断
    Javascript遍历each与map
    html5Canvas绘制弧线(圆形)
    jQuery插件背景滑动菜单(第二次自已偿试写插件)
  • 原文地址:https://www.cnblogs.com/sauronKing/p/5899740.html
Copyright © 2011-2022 走看看