鼠标坐标Windows GetWindowRect GetClientRect ClientToScreen

时间:2019-05-29 11:14:56

标签: c++ windows coordinates mouse dpi

我正在一个类似RDP的项目中工作,我在一个远程机器上共享一个应用程序。

我设法在客户端正确获取坐标。 假设我有一个Windows 10x10窗口,当我将鼠标移到最左上角时, 0,0和右下角给我9x9,这就是我想要的。

我通过电线发送此数据,并尝试将此坐标映射到实际应用中。

    RECT WindowRect = { 0, 0, 0, 0 };
    RECT WindowClientRect = { 0, 0, 0, 0 };
    POINT Origin;
    //POINT Ofs;

    GetWindowRect(appCaptureHwnd, &WindowRect);
    //GetClientRect(appCaptureHwnd, &WindowClientRect);
    Origin.y = WindowRect.top;
    Origin.x = WindowRect.left;
    //ClientToScreen(appCaptureHwnd, &Origin);
    //Ofs.x = Origin.x - WindowRect.left;
    //Ofs.y  = Origin.y - WindowRect.top;

    int maxWidth = GetSystemMetrics(SM_CXSCREEN);
    int maxHeight = GetSystemMetrics(SM_CYSCREEN);

    // per app sharing code maps the browser map coordinates to the coordintes of the actual sender shared app
    mouse_event.mi.dx = (LONG)((float)(((Origin.x + x) * (65535.0f) / maxWidth)));
    mouse_event.mi.dy = (LONG)((float)(((Origin.y + y) * (65535.0f) / maxHeight)));

当我运行此代码时,当我在0x0上时,我可以正确获取x,y坐标,但是当我移到右下角时,我看到y坐标越来越线性地偏离,它约30像素垂直关闭,但x坐标正确。

所以我猜测菜单是导致此问题的原因,但不是应用程序的边框,因为x坐标是正确的。
这在所有应用程序上都会发生,我正在测试将终端作为共享应用程序。 我猜它的样式是WS_OVERLAPPED。

我将线程和进程设置为DPI_AWARENESS_CONTEXT_SYSTEM_AWARE

任何想法可能是什么原因造成的。

0 个答案:

没有答案