getMouseMovePointsEx 函式 (winuser.h)
擷取最多 64 個先前滑鼠或手寫筆座標的歷程記錄。
語法
int GetMouseMovePointsEx(
[in] UINT cbSize,
[in] LPMOUSEMOVEPOINT lppt,
[out] LPMOUSEMOVEPOINT lpptBuf,
[in] int nBufPoints,
[in] DWORD resolution
);
參數
[in] cbSize
類型: UINT
MOUSEMOVEPOINT 結構的大小,以位元組為單位。
[in] lppt
類型: LPMOUSEMOVEPOINT
MOUSEMOVEPOINT 結構的指標,包含螢幕座標 (的有效滑鼠座標) 。 它也可能包含時間戳。
GetMouseMovePointsEx 函式會搜尋滑鼠座標歷程記錄中的點。 如果函式找到該點,它會傳回之前的最後 nBufPoints ,並包含提供的點。
如果您的應用程式提供時間戳, GetMouseMovePointsEx 函式會使用它來區分在不同時間記錄的兩個相等點。
應用程式應該使用從WM_MOUSEMOVE訊息收到的滑鼠座標 來 呼叫此函式,並將其轉換成螢幕座標。
[out] lpptBuf
類型: LPMOUSEMOVEPOINT
將接收點之緩衝區的指標。 其大小至少應為 cbSize* nBufPoints 。
[in] nBufPoints
類型: int
要擷取的點數。
[in] resolution
類型: DWORD
所需的解析度。 此參數可以是下列其中一個值。
值 | 意義 |
---|---|
|
使用顯示解析度擷取點。 |
|
擷取高解析度點。 點的範圍可以從零到 65,535 (0xFFFF) x 和 y 座標。 這是絕對座標指標裝置所提供的解析度,例如繪圖平板電腦。 |
傳回值
類型: int
如果函式成功,傳回值就是緩衝區中的點數。 否則,函式會傳回 –1。 如需擴充的錯誤資訊,您的應用程式可以呼叫 GetLastError。
備註
系統會保留最後 64 個滑鼠座標及其時間戳。 如果您的應用程式提供滑鼠座標給 GetMouseMovePointsEx ,而且座標存在於系統的滑鼠座標歷程記錄中,則函式會從系統的歷程記錄擷取指定的座標數目。 您也可以提供時間戳,以用來區分歷程記錄中的相同點。
GetMouseMovePointsEx 函式會傳回最後分派給呼叫線程的點,也會傳回其他線程。
在下列情況下,GetMouseMovePointsEx 可能會失敗或傳回錯誤的值:
- 如果在 MOUSEMOVEPOINT 結構中傳遞負座標,則為 。
- 如果 GetMouseMovePointsEx 擷取具有負值的座標。
- SM_XVIRTUALSCREEN,
- SM_YVIRTUALSCREEN,
- SM_CXVIRTUALSCREEN和
- SM_CYVIRTUALSCREEN。
int nVirtualWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN) ;
int nVirtualHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN) ;
int nVirtualLeft = GetSystemMetrics(SM_XVIRTUALSCREEN) ;
int nVirtualTop = GetSystemMetrics(SM_YVIRTUALSCREEN) ;
int cpt = 0 ;
int mode = GMMP_USE_DISPLAY_POINTS ;
MOUSEMOVEPOINT mp_in ;
MOUSEMOVEPOINT mp_out[64] ;
ZeroMemory(&mp_in, sizeof(mp_in)) ;
mp_in.x = pt.x & 0x0000FFFF ;//Ensure that this number will pass through.
mp_in.y = pt.y & 0x0000FFFF ;
cpt = GetMouseMovePointsEx(&mp_in, &mp_out, 64, mode) ;
for (int i = 0; i < cpt; i++)
{
switch(mode)
{
case GMMP_USE_DISPLAY_POINTS:
if (mp_out[i].x > 32767)
mp_out[i].x -= 65536 ;
if (mp_out[i].y > 32767)
mp_out[i].y -= 65536 ;
break ;
case GMMP_USE_HIGH_RESOLUTION_POINTS:
mp_out[i].x = ((mp_out[i].x * (nVirtualWidth - 1)) - (nVirtualLeft * 65536)) / nVirtualWidth ;
mp_out[i].y = ((mp_out[i].y * (nVirtualHeight - 1)) - (nVirtualTop * 65536)) / nVirtualHeight ;
break ;
}
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包含 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
另請參閱
概念
參考