• EyesBaby功能实现之窗口拖拽与缩放功能


    Winform中窗体拖拽主要由鼠标移动事件(MouseMove)、鼠标按下事件(MouseDown)和鼠标释放事件(MouseUp)完成。

    以下详细代码:

            private Point mouseOffset; //记录鼠标指针的坐标

            
    /// <summary>
            
    /// 鼠标移动事件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                
    if (isMouseDown)
                {
                    Point mousePos 
    = Control.MousePosition;
                    mousePos.Offset(mouseOffset.X, mouseOffset.Y);
                    
    // 设置窗口位置等于鼠标移动位置
                    Location = mousePos;
                }
            }

            
    /// <summary>
            
    /// 鼠标按下事件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                
    int xOffset;
                
    int yOffset;

                
    if (e.Button == MouseButtons.Left)
                {
                    xOffset 
    = -e.X - SystemInformation.FrameBorderSize.Width;
                    yOffset 
    = -e.Y - SystemInformation.CaptionHeight -
                    SystemInformation.FrameBorderSize.Height;
                    mouseOffset 
    = new Point(xOffset, yOffset);
                    isMouseDown 
    = true;
                }

            }

            
    /// <summary>
            
    /// 鼠标释放事件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                
    // 修改鼠标状态isMouseDown的值
                
    // 确保只有鼠标左键按下并移动时,才移动窗体
                if (e.Button == MouseButtons.Left)
                {
                    isMouseDown 
    = false;
                }

            }

    鼠标滚动轴控制窗口大小:

    需要实现鼠标滑动滚动轴事件(MouseWheel)。事件参数MouseEventArgs.Delta值分别是120和-120.

    代码如下:

     


            
    /// <summary>
            
    /// 鼠标滑动滚动轴事件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            void Form1_MouseWheel(object sender, MouseEventArgs e)
            {
                Size t 
    = pictureBox1.Size;
                t.Width 
    += e.Delta;
                t.Height 
    += e.Delta;
                
    // 控制窗口宽度大于100px
                if (e.Delta==120||(this.Size.Height > 100 && this.Size.Width > 200))
                    
    this.Size = t;
                
    // 消息提示居中
                lblMsg.Location = new Point((this.Width - lblMsg.Width) / 2, (this.Height - lblMsg.Height) / 2);

            }


    实际上EyesBaby中是通过图片控件来控制窗体的大小和拖动位置。

    源代码下载地址:http://eyesbaby.codeplex.com/

    安装版下载地址:https://files.cnblogs.com/yizhuqing/EyesBabySetup10.zip

    我的第一款实用工具-眼保程序(EyesBaby)

    EyesBaby1.0使用帮助文档

    EyesBaby功能实现之窗口拖拽与缩放功能

    EyesBaby功能实现之图片控件上添加字符

    EyesBaby功能实现之Windows前景色调节器

    EyesBaby功能实现之软件更新

    EyesBaby功能实现之窗口渐现效果

     

     欢迎加入EyesBaby开发小组

     EyesBaby需求反馈小组

     

    作者:柱子
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    CodeForces 156B Suspects(枚举)
    CodeForces 156A Message(暴力)
    CodeForces 157B Trace
    CodeForces 157A Game Outcome
    HDU 3578 Greedy Tino(双塔DP)
    POJ 2609 Ferry Loading(双塔DP)
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛十六进制转换成十进制
  • 原文地址:https://www.cnblogs.com/yizhuqing/p/1640856.html
Copyright © 2020-2023  润新知