【问题标题】:How do I get my cursor's position with respect to the window using graphics.h?如何使用 graphics.h 获取光标相对于窗口的位置?
【发布时间】:2020-06-24 12:26:23
【问题描述】:

我最近刚刚学会了如何获得我的鼠标位置,但是如果我移动我的窗口就会出现问题。例如,我想在鼠标坐标(x = 100,y = 100)的位置绘制一个点,这样系统将在窗口中的该坐标处绘制,这就是问题,因为鼠标位置是根据位置读取的的屏幕而不是窗口。如果我能以某种方式根据窗口而不是屏幕获取鼠标坐标,就可以解决问题。

#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");
    }
}

【问题讨论】:

  • 我移动我的窗口它有问题。请帮忙谢谢!我们不知道问题所在。虽然请注意graphics.h 不是现代代码。它原本打算在 1990 年代在 DOS 上运行,而不是在 2020 年在 Windows 机器上运行。此外,在显示的代码中,您似乎根本没有使用 graphics.h(除了包含标题)。
  • 什么样的“问题”,文森特?
  • @Vincent 你还没有解释“问题”是什么?您的代码中某处缺少},您的代码可能无法编译。这是问题吗?请edit您的问题并澄清。如果存在编译错误,请发布完整的错误日志。
  • 我们希望您在问题中描述问题,以节省时间 - 我们每天都会收到数千个问题,因此您正在争夺我们的时间!帮助我们帮助您。 :)
  • 我相信(我对这个主题的记忆正在消退)你需要一个你正在绘制的窗口的句柄来计算窗口坐标中的位置。话虽如此,我真的不认为您应该将 windows api 和 25 岁的 bgi 混合在一起。我不相信端口直接暴露了 windows api。

标签: c++ bgi


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多