2009-07-30 3 views
1

클리핑 영역과 관련하여 마우스 커서를 조작하고 있으므로이 화면에 "가짜"커서를 표시해야합니다. 내 실제 커서는 결국 숨겨지며 클리핑 작업을 수행하기위한 버퍼를 제공하기 위해 사용자의 가짜 커서에서 약간 벗어납니다. 하지만 그건별로 중요하지 않습니다.Cursor.Position과 함께 이동하도록 마우스 커서를 이동하지 않는 이유는 무엇입니까?

이것은 매우 이상합니다. 프로그램이 내 명령을 뻔뻔스럽게 무시하는 것처럼 보입니다. 나는 몇 가지 코드를 디버깅 있습니다

Debug.WriteLine("1fake: " + fakeMouse.X + " " + fakeMouse.Y); 
Debug.WriteLine("1real: " + this.PointToClient(Cursor.Position).X + " " + this.PointToClient(Cursor.Position).Y); 

int fmx = fakeMouse.X; 
int fmy = fakeMouse.Y; 

Cursor.Position = new Point(fmx, fmy); 

Debug.WriteLine("2fake: " + fmx + " " + fmy); 
Debug.WriteLine("2real: " + this.PointToClient(Cursor.Position).X + " " + this.PointToClient(Cursor.Position).Y); 

을 그리고이 같은 디버거 출력 결과 :

1fake: 489 497 
1real: 490 500 
2fake: 489 497 
2real: 274 264 // I just set this to be EXACTLY The same as the value above it!?! 

커서가 화면의 완전히 다른 부분으로, 탈출구 방식의 이동합니다. fmx, fmy 작업을 수행하여 문제를 순수한 정수 좌표로 줄였습니다. 그러나 여전히 올바른 매개 변수를 사용하지 않습니다. 어떻게 든 다른 곳으로 다시 바뀌 었습니까? 나는 이해하지 못한다.

답변

2

Cursor.Position은 화면 좌표의 한 점을 예상합니다. 포인트가 창 또는 클라이언트 좌표에 있으면 예상 한 위치에서 오프셋됩니다.

PointToScreen으로 전화하면됩니다. 같은 뭔가 : 당신은 출력을 쓰기 전에 PointToClient을 사용하고 있기 때문에

Cursor.Position = this.PointToScreen(new Point(fakeMouse.X, fakeMouse.Y)); 

http://msdn.microsoft.com/en-us/library/ms229598.aspx

+0

감사합니다. 이것은 나를 미치게했다. 내 코드에서 PointToClient 비트를 제거하면 더 큰 오프셋이 만들어 졌으므로 PointToScreen이 완벽하게 작동합니다. – cksubs

1

이다. 커서 위치는 화면과 관련이 없으며 양식이 아닙니다.

관련 문제