mouse_event点击坐标,似乎我迷失在坐标集
mouse_event click coordinates, seems I am lost in coordinate sets
似乎我在指定呼叫mouse_event
的鼠标坐标时遇到了困难。无论我如何设置呼叫,我似乎都无法让鼠标正确移动,即使它移动了,也只移动到左上角或右下角。pWnd
是一个指向控件的指针,我希望在某个时候点击,我目前正试图找出坐标系统。
知道为什么我可能正确移动鼠标吗?
pWnd->GetWindowRect(&wndRect);
POINT lpPoint = POINT();
lpPoint.x = wndRect.left;
lpPoint.y = wndRect.top;
ScreenToClient(mainFrm->GetSafeHwnd(), &lpPoint);
mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE , (DWORD)lpPoint.x, (DWORD)lpPoint.y, 0, 0);
mouse_event
使用的坐标不对应于窗口像素,它们映射到主监视器上的0到65535的范围。引用MOUSEINPUT
结构文档:
指定
MOUSEEVENTF_ABSOLUTE
value时,dx
和dy
包含0 ~ 65,535之间的归一化绝对坐标。事件过程将这些坐标映射到显示表面上。坐标(0,0)映射到显示表面的左上角;坐标(65535,65535)映射到右下角。在多监视器系统中,坐标映射到主监视器。
这意味着你需要从窗口坐标转换到这个特殊的范围。
DWORD dx = muldiv(x - rectPrimaryMonitor.left, 65535, rectPrimaryMonitor.Width());
DWORD dy = muldiv(y - rectPrimaryMonitor.top, 65535, rectPrimaryMonitor.Height());
你也许可以从方程中消除left
和top
,因为我认为主监视器的坐标根据定义是(0,0)。
我不知道这应该如何工作,如果你在上面的监视器或在主的左边,因为DWORD
是无符号的。
相关文章:
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 比较两个节点坐标的最佳方法是什么?
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在C++中获取坐标?
- 如何将 x.y 坐标的值存储在不同的数组中
- 迷失在指针的世界里
- 如何将鼠标坐标转换为"mm"
- 重心坐标并不总是有效(3d)
- 尝试渲染像素坐标时,简单线条渲染失败
- 使用 GTK3 C++获取指针坐标
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 我想制作设置鼠标回调函数,以便在仍然按下鼠标左键时连续传递坐标
- 将鼠标悬停在图片框上时,如何显示带有 x-y 坐标的十字准线光标?
- 跳转到通过输入坐标定义的控制台屏幕位置
- QImage::p ixel 和 QImage::setPixel 坐标超出范围误差
- mouse_event点击坐标,似乎我迷失在坐标集