2015-10-20 117 views
2

我有一個小的2160 x 1440屏幕,所以我在Windows中使用了150%的縮放比例。光標位置函數返回錯誤的值

使用Cursor.Position甚至GetCursorPos/GetPhysicalCursorPos我總是讓我的屏幕上的縮放座標(例如(2160,1440)成爲(1440,960)。

我肯定這是一個最近的變化,因爲我使用Cursor.Position該屏幕沒有問題之前。

怎麼能這種行爲解釋呢?爲什麼都GetCursorPosGetPhysicalCursorPos返回相同的值時,他們應該是我的屏幕上有什麼不同?

而且最重要的,是唯一的出路得到t他正確的調整了這些函數使用DPI返回的值?

+0

您是否嘗試過使用'PhysicalToLogicalPoint'功能? – sharpener

+0

剛剛嘗試過使用'GetDesktopWindow()'作爲句柄。不幸的是座標值沒有改變。還有其他建議嗎? – Royce

回答

0

對於遇到此問題的人,我仍然沒有解釋爲什麼在使用GetPhysicalCursorPosGetCursorPos檢索它們時,物理和邏輯座標之間沒有區別。 PhysicalToLogicalPoint沒有工作,因爲在Windows 8.1之後不再支持它。

但是,通過在其app.manifest中創建表格dpiAware似乎可以使所有程序保持一致。這基本上使得所有座標合乎邏輯,消除了使用系統的dpi來計算這個值的需要。 例如,在運行時更改窗體的寬度,與在編輯器中更改窗體的寬度(使用1.5倍以上)相比改變的量不同。另一個例子是使用Graphics.CopyFromScreen,它會讓我* 1.5的檢索座標正常工作。在改變dpi意識後,現在這一切都正常工作。