Как мне получить позицию моего курсора относительно окна с помощью Graphics.h?

Я только недавно научился определять положение мыши, но если я перемещаю окно, возникает проблема. Например, я хочу нарисовать точку в положении координаты мыши (x = 100, y = 100), поэтому система будет рисовать в этой координате в окне, и это проблема, потому что положение мыши читается в соответствии с положением ЭКРАНА вместо ОКНА. Если бы я мог каким-то образом получить координату мыши в соответствии с окном, а не экраном, это решило бы проблему.

photo

#include<graphics.h>
#include<iostream>
#include<windows.h>
using namespace std;

int main()
{
    initwindow(800,600);
    POINT CursorPosition;

    while(1)
    {
        GetCursorPos(&CursorPosition);

        cout << CursorPosition.x << endl;
        cout << CursorPosition.y << endl;

        if(GetAsyncKeyState(VK_LBUTTON)) {
        bar(CursorPosition.x, CursorPosition.y, CursorPosition.x+50, 
        CursorPosition.y+50);
        }

        delay(5);
        Sleep(5);
        system("cls");
    }
}

person Vincent    schedule 12.03.2020    source источник
comment
Я перемещаю свое окно, у него возникла проблема. Пожалуйста, помогите, спасибо! Мы не знаем, в чем проблема. Хотя обратите внимание, что graphics.h не является современным кодом. Он предназначался для работы в DOS в 1990-х годах, а не на машине с Windows в 2020 году. Также вы, похоже, вообще не используете graphics.h (кроме включения заголовка) в показанном коде.   -  person drescherjm    schedule 12.03.2020
comment
Что за проблема, Винсент?   -  person Asteroids With Wings    schedule 12.03.2020
comment
Прошу прощения за то, что не совсем понятно объяснил, в чем проблема. Я отредактировал свой вопрос, попробуйте новый код, и вы сможете понять это. ты   -  person Vincent    schedule 12.03.2020
comment
@ Винсент, ты так и не объяснил, в чем проблема? И где-то в вашем коде отсутствует }, и ваш код, вероятно, не компилируется. Это проблема? Пожалуйста, отредактируйте свой вопрос и уточните. Если есть ошибки компиляции, выложите полный лог ошибок.   -  person Jabberwocky    schedule 12.03.2020
comment
@Jabberwocky Нет, ошибки компиляции нет, я просто забыл поставить }, попробуйте еще раз запустить код. Попробуйте щелкнуть где-нибудь внутри окна и переместить окно, и вы увидите большую разницу.   -  person Vincent    schedule 12.03.2020
comment
Мы бы предпочли, чтобы вы описали проблему в своем вопросе, чтобы сэкономить время - мы получаем тысячи вопросов каждый день, поэтому вы конкурируете за наше время! Помогите нам помочь вам. :)   -  person Asteroids With Wings    schedule 12.03.2020
comment
Я полагаю (моя память на эту тему угасает), вам нужен дескриптор окна, в котором вы рисуете, чтобы вычислить положение в координатах окна. С учетом сказанного я действительно не думаю, что вам следует смешивать Windows API и 25-летний bgi. Я не верю, что порт напрямую раскрывает Windows API.   -  person drescherjm    schedule 12.03.2020


Ответы (1)


Вот простое решение, которое показывает, как преобразовать позицию курсора в позицию окна. Это доказательство концепции использует GetForeGroundWindow(), GetCursorPosition() и ScreenToClient(). Удерживайте правую кнопку мыши и перемещайте мышь по окну консоли, чтобы увидеть вывод.

#include <iostream>
#include <windows.h>

int main()
{
    while (1)
    {
        if (GetAsyncKeyState(VK_RBUTTON))
        {
            POINT pnt;
            GetCursorPos(&pnt);
            ScreenToClient(GetForegroundWindow(), &pnt);

            std::cout << "x: " << pnt.x << " y: " << pnt.y << std::endl;

            Sleep(300);
        }
    }

    return 0;
}
person GuidedHacking    schedule 29.06.2020