MFC:从触摸屏输入重新转换鼠标坐标



我正在尝试更改触摸屏返回的鼠标坐标。 例如,如果我有一个始终全屏的应用,并且用户触摸坐标 (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);
}

我确信您的OnLButtonDown处理程序确实会获得坐标的修改值。鼠标消息与鼠标的"物理"位置无关。它只是一条消息,告诉您的窗口在某个位置发生了鼠标事件。

要设置鼠标的实际位置,您需要调用 SetCursorPos。另外,我相信您应该处理WM_TOUCH消息。

编辑:如果要在应用程序中全局捕获鼠标坐标,请考虑使用钩子。SetWindowsHookEx + WH_MOUSE.这可以从另一个进程完成,但在这种情况下,您需要将挂钩内容放在 DLL 中,操作系统将为所有进程注入该内容(请参阅此处)。要记住的一件事;始终使您的钩子尽可能轻巧!

最新更新