在windows軟件中,經常會碰到一個功能:鼠標hover在某個地方時會出現窗口,有時候這個窗口的位置是會動態調整的。
熟悉使用windows API,理解windows中虛擬坐標、工作區坐標、屏幕坐標等含義
::ClientToScreen::ScreenToClient::GetWindowRect- 等其他常見的windows坐標轉換的API
多屏顯示器模式下,如果獲取某個點在其所在屏幕的相對位置?
該問題沒有搜索出直接的解決方案,但是有間接的方法。
某個點相對於所在屏幕的位置,可以利用該點的絕對坐標和所在屏幕的絕對坐標得到。所以,如果可以得到所在屏幕在所有屏幕構成的虛擬工作區的坐標也是可以的。以下示例代碼即可獲取到某個點所在的屏幕的窗口位置:
CRect rcWorkArea;
//獲取到顯示器句柄
HMONITOR hMonitor = MonitorFromPoint(
pSomePoint, //某個屏幕絕對坐標值表示的點
MONITOR_DEFAULTTONULL
);
if (hMonitor)
{
MONITORINFO info;
info.cbSize = sizeof(MONITORINFO);
if (GetMonitorInfo(hMonitor, &info))
{
rcWorkArea = info.rcMonitor;
}
}
接下來,通過 pSomePoint 和 rcWorkArea 的坐標進行運算,就可以得到該點相對於該屏幕的坐標。相關知識查看MSDN中相關說明
- 多屏幕windows開發可參考相關博客
