. 수락 된 응답의 코드는 창을 바탕 화면 외부로 이동할 수 없도록합니다. 이제 사용자가 드래그하는 동안 커서를 창에 "고정"하려고합니다. 따라서 창을 더 이상 이동할 수 없으면 커서도 더 이상 움직여서는 안됩니다.
질문에 대한 나의 이해가 정확하다면 WM_NCLBUTTONDOWN 메시지를 처리하여 마우스 움직임 제한을 계산해야합니다. 그런 다음 Cursor.Clip
을 사용하여 이러한 제한을 적용 할 수 있습니다.
그러나 WM_NCLBUTTONDOWN 메시지에서 클립 사각형을 적용하면 즉시 제거됩니다. 대신 WM_MOVING 메시지에 적용하면 끌기가 끝나면 자동으로 제거됩니다.
이것은 또한 위의 질문에 대한 해결책입니다 : 사용자가 창을 드래그하는 동안 마우스를 계산 사각형 내에서만 움직일 수 있다면 창 자체는 허용 된 영역에서만 이동할 수 있습니다.
public const int WM_MOVING = 0x0216;
public const int WM_NCLBUTTONDOWN = 0x00A1;
public const int HT_CAPTION = 0x0002;
private Rectangle _cursorClip = Rectangle.Empty;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NCLBUTTONDOWN:
if (m.WParam.ToInt32() == HT_CAPTION)
{
Point location = Cursor.Position;
Rectangle screenBounds = Screen.PrimaryScreen.Bounds;
Rectangle formBounds = Bounds;
_cursorClip = Rectangle.FromLTRB(location.X + screenBounds.Left - formBounds.Left,
location.Y + screenBounds.Top - formBounds.Top,
location.X + screenBounds.Right - formBounds.Right,
location.Y + screenBounds.Bottom - formBounds.Bottom);
}
break;
case WM_MOVING:
Cursor.Clip = _cursorClip;
break;
}
base.WndProc(ref m);
}
왜 전 세계 사용자가 그런 식으로 좌절시키고 싶습니까? –