gpt4 book ai didi

c++ - 鼠标事件点击坐标,好像我迷失在坐标集中

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:49 24 4
gpt4 key购买 nike

似乎我在为调用 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 structure文档:

If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor.

这意味着您需要从窗口坐标转换到这个特殊范围。

DWORD dx = muldiv(x - rectPrimaryMonitor.left, 65535, rectPrimaryMonitor.Width());
DWORD dy = muldiv(y - rectPrimaryMonitor.top, 65535, rectPrimaryMonitor.Height());

您可以从等式中消除 lefttop,因为我认为主监视器的坐标根据定义是 (0,0)。

如果您在主监视器的上方或左侧,我不知道这应该如何工作,因为 DWORD 是未签名的。

关于c++ - 鼠标事件点击坐标,好像我迷失在坐标集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com