是否正在拖动外部窗口?

时间:2010-07-15 02:14:35

标签: c# draggable user32

我有一个程序可以让窗口捕捉到指定位置和大小的插槽。您可以拖动窗口,然后在完成拖动时它将捕捉到最近的插槽。我要添加的是当拖动发生时窗口将移动到的插槽的叠加。

捕捉和叠加效果很好。我的问题是我需要一种更好的方法来知道窗口是否被拖动。在拖动发生时我阻止窗口卡入插槽的方式是在单击鼠标时没有做任何事情。单击鼠标时绘制叠加层会起作用,但即使正在拖动窗口,也会在任何时候单击鼠标时显示叠加层。

是否有一种方法可以使用hwnd并告诉我该窗口是否被拖动?或者有更好的方法来处理这个过程吗?

1 个答案:

答案 0 :(得分:2)

由于我找不到任何东西,没有人提出任何建议,我最终写了一些近似的东西。 Win32是我的静态类,它处理与DllImport交互的所有structuser32.dll定义。

private bool isWindowDragging(IntPtr hWND, Win32.RECT rect)
{
  Point pos = Control.MousePosition;
  return Control.MouseButtons.Equals(MouseButtons.Left) && hWND.Equals(Win32.GetForegroundWindow()) &&
  pos.X >= rect.Left && pos.X <= rect.Right && pos.Y >= rect.Top && pos.Y <= rect.Top+40;
}