用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c#代码库

窗口自动吸附桌面边缘

2012-10-25 作者: 程序猿style举报

[c#]代码库

using System.Windows.Forms;
using System;
namespace **
{
 
public partial class ***: form
{
    /* 【必要事件】:
     * No.1:窗体的 Move 事件。
     * No.2:窗体的 MouseEnter事件。
     * No.3:MouseLeave事件。在窗体的“deactivated”事件 + 窗体中[所有的控件]leave的事件中都加入该事件。
     * 将“**”更改为最终要使用的窗体的namespace。
     */
 
    int intBianYuanXiangSu = 7; //边缘像素。即当窗体缩回去的时候,露出来多少像素,来提示窗体位置。
 
    /// <summary>
    /// 自动粘合桌面边缘。
    /// </summary>
    /// <param name="intJingDu">自动粘合的精度,默认10像素。</param>
    /// <param name="LeftRight">是否启动在接近桌面左右边缘时也自动粘合。</param>
    private void myMethod_AutoAbsorb ( int intJingDu , bool LeftAndRight )
    {
 
        //小于10像素.则使用默认10像素。
        if ( intJingDu <= 10 )
            intJingDu = 10;
 
        //只有在窗体!不在!桌面的边缘的时候,才开始判断是否开始吸附。
        if ( Left != SystemInformation.WorkingArea.Width - this.Size.Width && Left != 0 && Top != 0 )
        {
 
 
            //当窗体靠近桌面"上方"的时候,开始粘合。
            if ( Location.Y <= intJingDu && Location.Y > -this.Size.Height + intBianYuanXiangSu )
                Top = 0;
 
            if ( LeftAndRight == true )
            {
                //当窗体靠近桌面的"左边缘"时候,开始粘合。
                if ( this.Location.X <= intJingDu && Location.X > -Size.Width + intBianYuanXiangSu )
                    Left = 0;
 
                //当窗体靠近桌面“右边缘”的时候,开始粘合。WorkingArea获得桌面的尺寸的属性。
                if ( Location.X >= ( SystemInformation.WorkingArea.Width - this.Size.Width - intJingDu )
                        && Left < SystemInformation.WorkingArea.Width - intBianYuanXiangSu )
                    Left = SystemInformation.WorkingArea.Width - Size.Width;
            }
        }
    }
 
 
    private void myMethod_AutoAbsorb_MouseEnter()
    {
 
        if ( Top == -this.Size.Height + intBianYuanXiangSu ) //上边缘
            this.Top = 0;
 
        if ( Left == -this.Size.Width + intBianYuanXiangSu ) //左边缘
            this.Left = 0;
 
        if ( Left == SystemInformation.WorkingArea.Width - intBianYuanXiangSu ) //右边缘
            this.Left = SystemInformation.WorkingArea.Width - this.Size.Width;
 
 
    }
 
    //在窗体的deactivated事件 + 窗体中所有的控leave件的事件中都加入以下事件。这样勉强达到效果。
    private   void myMethod_AutoAbsorb_MouseLeave()
    {
 
        //只有鼠标不在窗体的内部范围的时候,才开始缩回去。
        if ( ! ( ( Control.MousePosition.X >= Left && Control.MousePosition.X <= Left + Width ) &&
                 ( Control.MousePosition.Y >= Top && Control.MousePosition.Y <= Top + Height ) ) )
        {
            if ( Top == 0 ) //上边缘
                Top = -Size.Height + intBianYuanXiangSu;
 
            if ( Left == 0 ) //左边缘
                Left = -Size.Width + intBianYuanXiangSu;
 
            if ( Left == SystemInformation.WorkingArea.Width - Size.Width ) //右边缘
                Left = SystemInformation.WorkingArea.Width - intBianYuanXiangSu;
 
        }
 
 
    }
}
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...