Всем привет! Мне необходимо сделать такое окно, которое бы при приближении к краям экрана прилепало к этим краям. После прилипания к левой или правой части - окно имеет фиксированную ширину и максимальную высоту, при прилепании к верху или низу - должно иметь фиксированную высоту и максимальную ширину. При этом, если пользователь захочет отлепить это окно, то оно должнопоменять размер, скажем на (200,200) и отодвинуться от зоны прилипания.
Само прилипания я реализовал. Возникли проблемы при реализации отлипания.
Код | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace WordLearn { public partial class FormWord : Form { private const int stickDist = 100; private Screen scn = null; private int maxW = 0; private int maxH = 0;
private int fixedW = 300; private int fixedH = 300;
public FormWord() { InitializeComponent(); }
private void FormWord_Load(object sender, EventArgs e) { this.scn = Screen.FromPoint(this.Location); maxW = scn.WorkingArea.Width; maxH = scn.WorkingArea.Height; Point p = new Point(0, 0); this.Size = new Size(fixedW, maxH); this.Location = p; }
private void FormWord_Move(object sender, EventArgs e) { if (maxH != 0 && maxW != 0 && this.Location.X != 0 && this.Location.Y != 0 && this.Location.X != maxW-fixedW && this.Location.Y != maxH - fixedH) { label1.Text = this.Location.X.ToString() + ":" + this.Location.Y.ToString(); if (this.Location.Y < stickDist) { Point p = new Point(0, 0); this.Size = new Size(maxW, fixedH); this.Location = p; } else if ((this.Location.Y + this.Height) > (maxH - stickDist)) { Point p = new Point(0, (maxH - fixedH)); this.Size = new Size(maxW, fixedH); this.Location = p; }else if (this.Location.X < stickDist) { Point p = new Point(0, 0); this.Size = new Size(fixedW, maxH); this.Location = p; } else if ((this.Location.X + this.Width) > (maxW - stickDist)) { Point p = new Point((maxW - fixedW), 0); this.Size = new Size(fixedW, maxH); this.Location = p; } } }
private void FormWord_ResizeBegin(object sender, EventArgs e) { this.Size = new Size(200,200); int x = 0; int y = 0; if (this.Location.Y == 0) { y = stickDist * 2; } else { y = this.Location.Y - stickDist * 2; } if (this.Location.X == 0) { x = stickDist * 2; } else { x = this.Location.X - stickDist * 2; }
this.Location = new Point(x, y); Cursor.Position = new Point(x + 2, y + 2);
}
} }
|
Отлипание я как раз начал реализовывать в методе FormWord_ResizeBegin - но эффекта от такого отлипания ноль. Помогите пожалуйста реализовать отлипание, такое как я описал выше. Заранее спасибо. |