C# 中如何实现磁性窗体
C# 中如何实现磁性窗体? --------------------编程问答-------------------- 判断和屏幕边界的距离,如果小于阈值,则位置换算到和屏幕相切 --------------------编程问答-------------------- 补充一句,用Form的move事件触发判断 --------------------编程问答-------------------- 什么是"磁性",第一次听到 --------------------编程问答-------------------- 其实实现起来也很简单:截获主窗体的WM_MOVE(窗体移动)消息,同时设置附属窗体的位置。代码如下:
protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x3;
if (m.Msg == WM_MOVE )
{
if (frm != null)
{
frm.Left = this.Left + this.Width;
frm.Top = this.Top;
return;
}
}
base.WndProc(ref m);
}
frm 即附属窗体的对象 --------------------编程问答-------------------- form的onmousemove等事件里处理
WM_SYSCOMMAND --------------------编程问答--------------------
象QQ那样拖曳到屏幕边上时缩到边上去--------------------编程问答--------------------
private void Form1_MouseLeave(object sender, System.EventArgs e) {
const int j = 5; // 要故意露出在右上的高度
if (this.Top <1) { //如果当前X 已经是在最顶
// 并且Y 也已经在最右边
if (this.Left >= Screen.PrimaryScreen.WorkingArea.Width - this.Width) {
// 开始往上移
while(this.Top >= 0-this.Height + j) {
this.Top --;
}
}
}
}
private void Form1_MouseEnter(object sender, System.EventArgs e) {
if (this.Top <0) {
// 这里是移回正常位置的代码你接上面的逆着做就是了
}
}
学习
这个应该涉及到算法 --------------------编程问答-------------------- http://topic.csdn.net/t/20020927/22/1059699.html --------------------编程问答-------------------- C# 实现磁性窗口(附源码和程序) --------------------编程问答-------------------- 就是要一些 窗体的 当位置发生变化时 的事件 locationChangde --------------------编程问答-------------------- 调用windows api
补充:.NET技术 , C#