Координаты мыши Windows GetWindowRect GetClientRect ClientToScreen - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над проектом, похожим на RDP, где я делюсь приложением на удаленной машине.

Мне удается правильно получить координаты на стороне клиента. Скажем, у меня есть окна 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)));

Когда я запускаю этот код, я получаю координаты x, y правильно, когда я нахожусь на 0x0, но когда я двигаюсь в правый нижний угол, я вижу, что координата y линейно уменьшается, она получает около 30 пикселей Выкл по вертикали, но координата х верна.

Итак, я предполагаю, что меню вызывает это, но не границу приложения, поскольку координата x верна.
Это происходит во всех приложениях, я тестирую с терминалом в качестве общего приложения. Я предполагаю, что его стиль WS_OVERLAPPED.

У меня есть нить и Процесс, настроенные на DPI_AWARENESS_CONTEXT_SYSTEM_AWARE

Любые идеи, что может быть причиной этого.

...