比如我把一个Form 的 FormBorderStyle属性设置成None
然后那个窗体却没有了移动的标栏 。
求 。 Form 的 FormBorderStyle 属性设置为None 的时候 如何实现 整个窗体都可以拖动!
单击住拖动, 哪里都可以拖动 , 松手的时侯窗体在那个位置 。 像以前的一样拖动法 。 求高手帮忙 。 代码多长都想看
要有明确注释
然后那个窗体却没有了移动的标栏 。
求 。 Form 的 FormBorderStyle 属性设置为None 的时候 如何实现 整个窗体都可以拖动!
单击住拖动, 哪里都可以拖动 , 松手的时侯窗体在那个位置 。 像以前的一样拖动法 。 求高手帮忙 。 代码多长都想看
要有明确注释
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
#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指当前窗体句柄
}
找不到命名空间 ? 缺少引用 ?
这是怎么回事情? 本人很菜。 不知道哪里错了 。 提示说 要using ?
using System.Runtime.InteropServices;
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);//拖动窗体
}
}
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();