简介:
窗体的FormBorderStyle属性为None时,可以使用鼠标移动窗体。
1.介绍
FormBorderStyle |
|
MouseDown | 当鼠标指针位于控件上并按下鼠标键时发生。 |
ReleaseCapture | 鼠标捕获。如果控件当前具有鼠标捕获,释放访问。 否则,此功能不起作用。 |
SendMessage | 向消息窗口发送一条消息,并一直等到 WndProc 方法处理此消息。 |
PostMessage | 在与创建指定窗口的线程关联的消息队列中放置(发布)消息,并返回消息,而无需等待线程处理该消息。要在与线程关联的消息队列中发布消息,请使用PostThreadMessage函数。 |
名称 | 数值 | 含义 |
---|---|---|
WM_SYSCOMMAND | 0x0112 | 当用户从窗口菜单选择一个命令或当用户选择最大化按钮,最小化按钮,复原按钮或关闭按钮时,一个窗口将会接收该消息。 |
SC_MOVE | 0xF010 | 移动窗口 |
HTCAPTION | 0x0002 | 表示鼠标在窗口标题栏时的系统信息 |
2.使用
- 通过窗体的MouseDown事件。
- user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。
- PostMessage返回值是true,SendMessage是false。第四个变量数值无特殊要求。
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
//第一种
bool result = ReleaseCapture() && PostMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
第二种
//bool result = ReleaseCapture() && SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;