如题,最近在做个小程序,想实现下磁性窗体的效果,但遇到蛮多问题,查了好久都没什么好的例子,现在还只能做靠近屏幕边框时被吸住的效果    哪位大虾有这方面的效果给个例子啊    
贴进来  或发我邮箱里都可以    [email protected]或者[email protected]      谢啦

解决方案 »

  1.   

    这需要捕获WM_MOVE消息...在Form中override WndProc方法中处理...去查一下Windows消息大全...
      

  2.   

    下面是一位前辈给出的移动代码
    截获主窗体的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即附属窗体的对象
    这段代码我没做测试 
      还有主窗体和子窗体相吸的效果也出了点问题,我用的是定位坐标,但这样的话它就不能超过那个坐标了  比如说在做横向的时候确定的是窗体的X轴坐标 当他们吸引了以后,窗体的X轴坐标就不能再超过这个坐标了 高手来指点下啊
      

  3.   

    if (m.Msg == WM_MOVE )
    {
      if (frm != null)
      {
        frm.SetDesktopLocation(this.Left + this.Width,this.Top);
        //return; 这里绝对不能return!
    }
    base.WndProc(ref m);//这个一定要执行到!
    多看看MSDN或Windows API参考吧...
      

  4.   

    给你个建议,你看可以参考一下<C#范例完全自学手册>这本书,这本书上有相关的例子。
      

  5.   

    是不是要子窗体跟着父窗体的移动而移动如果是的话这里有例子http://download.csdn.net/source/2003239
      

  6.   

    Invoke传递窗体的参数就可以的