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

MFC:从触摸屏输入重新转换鼠标坐标,mfc,touch,Mfc,Touch,我试图改变触摸屏返回的鼠标坐标。例如,如果我有一个始终全屏的应用程序,并且用户触摸坐标(1023767),那么我希望鼠标光标位于(799479)。这应该是一个简单的比例公式,但我似乎无法做到这一点。我尝试过在PreTranslateMessage中更改坐标,但无论我将值设置为什么,它似乎都没有任何效果 我需要在应用程序级别执行此操作,因为我没有访问驱动程序/控制器级别的权限 以下是我的实验样本: BOOL CMyDialog::PreTranslateMessage(MSG* pMsg) {

我试图改变触摸屏返回的鼠标坐标。例如,如果我有一个始终全屏的应用程序,并且用户触摸坐标(1023767),那么我希望鼠标光标位于(799479)。这应该是一个简单的比例公式,但我似乎无法做到这一点。我尝试过在
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
处理程序确实得到了你坐标的修改值。鼠标消息与鼠标的“物理”位置无关。它只是一条消息,告诉窗口鼠标事件发生在某个位置

要设置鼠标的实际位置,需要调用。另外,我认为你应该处理好这个信息


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

我对它进行了测试,并且
OnLButtonDown
收到了未更改的坐标,因此我在
PreTranslateMessage
中所做的没有任何效果。不幸的是,我没有太多的Windows编程经验。我假设这只能在驱动程序级别完成?您始终可以在处理程序中执行计算。例如,OnLButtonDown(…)。为什么不这样做呢?它不会在应用程序中的多个对话框之间工作,因为会调用错误对话框的OnLButtonDown。翻译需要提前或在较低级别上完成。我想知道是否有可能在我的原始应用程序收到消息之前,创建另一个总是“窃取”鼠标输入并重新传输的应用程序。