Point OldWinowPosition;//拖动前窗体位置 Point OldMousePosition;//拖动前鼠标位置 Point HideBeforPosition;//隐藏前窗体位置 Size OriginalSize;//隐藏前窗体大小 RichTextBox CurrentRichBox;//当前页签的RichBox int MarignSpan = 1;//缩进是与屏幕距离 int Border = 3;//缩进隐藏宽度 int MaxX;//屏幕最长X int MaxY;//屏幕最长Y bool IsMouseDown;// 鼠标是否按下 enum PadDock//缩进类型 上下左右 { none = 0,//无缩进 Left = 1,//左缩进 Top = 2,// Right = 3,// Bottom = 4,// }; PadDock FormDock; public Form1() { InitializeComponent();
检测到窗体的top<=3
然后就把窗体的位置该到上面去
top=top-length
没试过,但思路肯定没错
但是那个程序是VB写的
呵呵
原理:
==========
定时器,实时捕获窗口的TOP位置的值,假如小于20的时候,吧top直接设置成0
这样就有一种被显示器上边框吸附上去的感觉
技巧呀,呵呵
完了再判断鼠标是否移除了窗口,假如移除了,设置TOP的值为负数,如窗口高350,那么这个负值的绝对值一定大于350,比如-400
这样鼠标松开用定时器慢慢叫top渐渐从0到-400
看定时器的设置了,呵呵,做的最好有连贯性,呵呵
我的还不错,收缩的没有腾讯的那么利索,不过效果还可以
如果实现腾讯的漂亮收缩,最好用线程,这样动画效果就连贯了呵呵
========================
希望给你有启发,呵呵,给分,我最近花完了
MoveLeft 事件里写
iTop=5-this.Top;
if(this.Top==0)
{
this.Top=1;
}
else if(this.Top==1)
{
this.Top=iTop;
}在鼠标进入事件里写MoveEnter
if(this.top<)
{
this.top=0;
}lz 试试这段代码 我试过了的,能实现你所说的功能!!
public partial class Form1 : Form
{
Point OldWinowPosition;//拖动前窗体位置
Point OldMousePosition;//拖动前鼠标位置
Point HideBeforPosition;//隐藏前窗体位置
Size OriginalSize;//隐藏前窗体大小
RichTextBox CurrentRichBox;//当前页签的RichBox
int MarignSpan = 1;//缩进是与屏幕距离
int Border = 3;//缩进隐藏宽度
int MaxX;//屏幕最长X
int MaxY;//屏幕最长Y
bool IsMouseDown;// 鼠标是否按下
enum PadDock//缩进类型 上下左右
{
none = 0,//无缩进
Left = 1,//左缩进
Top = 2,//
Right = 3,//
Bottom = 4,// };
PadDock FormDock; public Form1()
{
InitializeComponent();
//初始化
IsMouseDown = false;
MaxX = Screen.PrimaryScreen.WorkingArea.Right - MarignSpan;
MaxY = Screen.PrimaryScreen.WorkingArea.Bottom - MarignSpan;
OriginalSize = this.Size;
FormDock = PadDock.none;
CurrentRichBox = this.richTextBox1;
}
/// <summary>
/// 判断窗体停靠类型
/// </summary>
private void DealPadDock()
{
FormDock = PadDock.none;
if (this.Location.X <= 0)
{
this.Location = (new Point(0, this.Location.Y));
FormDock = PadDock.Left;
}
else if ((this.Width + this.Location.X) >= MaxX)
{
this.Location = (new Point(MaxX - this.Width, this.Location.Y));
FormDock = PadDock.Right;
} if (this.Location.Y <= 0)
{
this.Location = (new Point(this.Location.X, 0));
FormDock = PadDock.Top;
}
else if ((this.Height + this.Location.Y) >= MaxY)
{
this.Location = (new Point(this.Location.X, this.MaxY - Height));
FormDock = PadDock.Bottom;
}
}
#region 窗体隐藏恢复功能
private void ReSizeToOrginal()
{
this.Size = this.OriginalSize;
// this.richTextBox1.Visible = true; }
private void ReSizeLeftMin()
{
this.Size = new Size(Border, this.Height);
this.Location = new Point(0, this.Location.Y);
}
private void ReSizeTopMin()
{
this.Size = new Size(this.Width, Border);
// this.richTextBox1.Visible = false;
this.Location = new Point(this.Location.X,0);
}
private void ReSizeRightMin()
{
this.Size = new Size(Border, this.Height);
this.Location = new Point(MaxX, this.Location.Y); }
private void ReSizeBottomMin()
{
this.Size = new Size(this.Width, Border);
this.Location = new Point(this.Location.X, MaxY);
// this.richTextBox1.Visible = false;
}
private void _MouseLeave()
{ DealPadDock(); if (FormDock != PadDock.none)
{
switch (FormDock)
{
case PadDock.Left: this.ReSizeLeftMin(); break;
case PadDock.Top: ReSizeTopMin(); break;
case PadDock.Right: ReSizeRightMin(); break;
case PadDock.Bottom: ReSizeBottomMin(); break;
default: break;
} }
}