2014-10-28 90 views
2

我需要一種將某些絕對座標(相對於主屏幕)映射到某個屏幕的相對座標的方法。C#:在多個屏幕環境中將絕對地圖屏幕映射到相對屏幕座標

例如,如果您配置了兩個屏幕,如果主屏幕是右側的一個,有一些有效的負座標點向左側屏幕。我需要將這些絕對座標始終轉換爲相對於左側屏幕的正數。

編輯:我們的目標是要知道,如果一些絕對座標是在使用

Screen.WorkingArea.Contains(thePoint), 

遍歷可用的屏幕一些可用的屏幕有效。

謝謝

+0

爲什麼你需要*正面*座標才能達到目標? Screen.WorkingArea.Contains方法也可以用於負座標。 – Dmitry 2014-10-28 15:02:26

+0

當我使用負座標時,該方法對於我的兩個屏幕中的任何一個都不返回true – dhalfageme 2014-10-28 15:10:54

+0

如果Screen.WorkingArea具有負座標且thePoint具有負座標,但Contains只返回false,答案是這個點不屬於'WorkingArea'。我對嗎? – Dmitry 2014-10-28 15:15:44

回答

1

這應該對任何屏幕配置做:

static Point GetRelativeCoordinates(Point absoluteCoordinates) 
{ 
    var screen = Screen.FromPoint(absoluteCoordinates); 
    return new Point(absoluteCoordinates.X - screen.Bounds.Left, absoluteCoordinates.Y - screen.Bounds.Top); 
} 

Bound屬性存儲屏幕TopLeft角的絕對座標([0, 0]是頂部,左側的主屏幕),因此無論您擁有多少個屏幕,將絕對座標轉換爲相對的座標都非常簡單。

我沒有測試的代碼,但它應該工作

+0

是的。但在這種情況下,我想測試點是否包含在某個屏幕中。 Screen.FromPoint方法返回距離最近的屏幕,但該點位於每個屏幕之外。但我正在使用的功能使竅門。謝謝 – dhalfageme 2014-10-29 17:57:28