问题描述
我正在尝试将鼠标光标移动并锁定在适当的位置,以计算用户移动它后的增量位置。我正在使用X11和XWarpPointer()
函数。我在另一个线程中发现了类似的问题,然后我遵循了它,但是它没有用。我什至研究了SDL源代码,但仍然一无所获。主要问题是,在我设置了鼠标的位置然后用户移动它之后,鼠标又移回到了原始位置(在使用XWarpPointer
之前)。
void sp::Mouse::getDeltaMousePosition(int *posX,int *posY)
{
if(!m_firstEnter)
{
getMousePosition(&m_lastX,&m_lastY);
m_firstEnter = true;
}
int tempX,tempY;
getMousePosition(&tempX,&tempY);
*posX = tempX - m_lastX;
*posY = tempY - m_lastY;
Window root_window = XRootWindow(ptr_display,0);
SelectInput(ptr_display,root_window,KeyReleaseMask);
XWarpPointer(ptr_display,None,m_screenCenterX,m_screenCenterY);
XFlush(ptr_display);
m_lastX = m_screenCenterX;
m_lastY = m_screenCenterY;
}
解决方法
我尝试在装有Linux系统的PC上编译代码,并且该代码有效。于我之前 是在虚拟机中编译它的,所以我猜想基本系统在使用鼠标时具有优先权。