我正在尝试更改触摸屏返回的鼠标坐标。例如,如果我有一个总是全屏的应用程序,并且用户触摸坐标(1023,767),那么我希望鼠标光标位于(799,479)。它应该是一个简单的缩放公式,但我似乎无法实现这一点。我已经尝试更改PreTranslateMessage
中的坐标,但无论我将值设置为什么,它似乎都没有任何效果。
我需要在应用程序级别执行此操作,因为我无法访问驱动程序/控制器级别。
以下是我的实验示例:
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_LBUTTONDOWN ||
pMsg->message == WM_LBUTTONUP ||
pMsg->message == WM_MOUSEMOVE)
{
// In this example, I'm simply reducing the "screen" by half.
// I am expecting that the mouse cursor would always be between
// my touch point and the upper-left corner, with a distance of half.
// But nothing seems to be happening. Is pMsg->pt just "read-only"?
pMsg->pt.x = pMsg->pt.x / 2;
pMsg->pt.y = pMsg->pt.y / 2;
}
return CDialog::PreTranslateMessage(pMsg);
}
答案 0 :(得分:1)
我确定你的OnLButtonDown
处理程序确实获得了坐标的修改值。鼠标消息与鼠标的“物理”位置无关。它只是告诉窗口在某个位置发生鼠标事件的消息。
要设置鼠标的实际位置,您需要调用SetCursorPos。另外,我相信你应该处理WM_TOUCH消息。
编辑:如果要在应用程序中全局捕获鼠标坐标,请考虑使用钩子。 SetWindowsHookEx + WH_MOUSE。这可以通过另一个进程完成,但在这种情况下,您需要将挂钩内容放在DLL中,操作系统将为所有进程注入(请参阅this)。要记住一件事;总是让你的钩子尽可能轻巧!