比如我把一个Form 的  FormBorderStyle属性设置成None
    然后那个窗体却没有了移动的标栏 。
  求 。 Form 的 FormBorderStyle 属性设置为None 的时候  如何实现 整个窗体都可以拖动!
    单击住拖动, 哪里都可以拖动  , 松手的时侯窗体在那个位置 。 像以前的一样拖动法 。    求高手帮忙 。    代码多长都想看 
 要有明确注释 

解决方案 »

  1.   

    在mouse_down事件中发送WM_NCLBUTTONDOWN
    public   const   int   WM_NCLBUTTONDOWN   =   0xA1; 
    public   const   int   HTCAPTION   =   0x2; 
    [DllImportAttribute   ( "user32.dll ")] 
    public   static   extern   int   SendMessage(IntPtr   hWnd,   int   Msg,   int   wParam,   int   lParam); 
    [DllImportAttribute   ( "user32.dll ")] 
    public   static   extern   bool   ReleaseCapture();
     
    PointToScreen
      

  2.   


    #region 窗体移动用        /// <summary>
            /// 该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。
            /// </summary>
            /// <returns></returns>
            [DllImport("user32.dll")]
            public static extern bool ReleaseCapture();
            /// <summary>
            /// 该函数将指定的消息发送到一个或多个窗口。
            /// </summary>
            /// <param name="hwnd"></param>
            /// <param name="wMsg">指定被发送的消息。 </param>
            /// <param name="wParam">指定附加的消息指定信息。 </param>
            /// <param name="lParam">指定附加的消息指定信息。 </param>
            /// <returns>返回值指定消息处理的结果,依赖于所发送的消息。</returns>
            [DllImport("user32.dll")]
            public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
            /// <summary>
            /// 
            /// </summary>
            public const int WM_SYSCOMMAND = 0x0112;
            /// <summary>
            /// 
            /// </summary>
            public const int SC_MOVE = 0xF010;
            /// <summary>
            /// 
            /// </summary>
            public const int HTCAPTION = 0x0002;        /// <summary>
            /// 移动窗体
            /// </summary>
            /// <param name="intptr">窗体句柄</param>
            public static void MoveForm(IntPtr intptr)
            {
                ReleaseCapture();
                SendMessage(intptr, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }        #endregion在需要响应移动窗体事件的控件增加MouseDown事件
    例如:
    private void panel1_MouseDown(object sender, MouseEventArgs e)
            {
                    MoveForm(this.Handle);//this.Handle指当前窗体句柄
            }
      

  3.   


    找不到命名空间 ?  缺少引用 ?  
       这是怎么回事情?    本人很菜。 不知道哪里错了 。  提示说 要using ?
      

  4.   


    using System.Runtime.InteropServices;
      

  5.   

    你新建个窗体。不用修改一行代码。双击窗体或查看代码。在Form1类中粘贴如下代码就能实现了。[System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wparam, int lparam);
    protected override void OnMouseDown(MouseEventArgs e)
    {
    base.OnMouseDown(e);
    if (e.Button == MouseButtons.Left)//按下的是鼠标左键
    {
    Capture = false;//释放鼠标,使能够手动操作
    SendMessage(this.Handle, 0x00A1, 2, 0);//拖动窗体
    }
    }
      

  6.   

    public const int WM_NCLBUTTONDOWN = 0xA1; 
    public const int HTCAPTION = 0x2; 
    [DllImportAttribute ( "user32.dll ")] 
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 
    [DllImportAttribute ( "user32.dll ")] 
    public static extern bool ReleaseCapture();