当前位置:编程学习 > C#/ASP.NET >>

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)   {   
  //   这里是移回正常位置的代码你接上面的逆着做就是了   
  }   
  }
--------------------编程问答--------------------
引用 6 楼 liangweiwei130 的回复:
C# code
象QQ那样拖曳到屏幕边上时缩到边上去   
  private   void   Form1_MouseLeave(object   sender,   System.EventArgs   e)   {   
  const   int   j   =   5; //   要故意露出在右上的高度   
    
  if   (this.Top   <1)   { //……

学习
这个应该涉及到算法 --------------------编程问答-------------------- http://topic.csdn.net/t/20020927/22/1059699.html --------------------编程问答-------------------- C# 实现磁性窗口(附源码和程序)  --------------------编程问答-------------------- 就是要一些 窗体的 当位置发生变化时 的事件 locationChangde --------------------编程问答-------------------- 调用windows api 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,