c++ - 如何在控制台窗口中找到光标的坐标?

标签 c++ windows winapi console

我使用以下代码为光标指定了一些坐标:

COORD c = { 7, 7 };
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(h, c); 

现在我正在屏幕上写一些文本,我想知道光标的当前位置。

我发现的唯一函数是使用 POINT 而不是 COORD。所以我写道:

VOID KeyEventProc(KEY_EVENT_RECORD ker)
{
    POINT position;
    GetCursorPos(&position);

        if (position.y<14 && position.x<9){
            if (ker.bKeyDown)
                printf("%c", ker.uChar);
        }

}

但是 POINT 没有给出我需要的相同值。我怎样才能转换它?或者获取当前COORD的函数是什么?

最佳答案

根据 SetConsoleCursorPosition 函数的文档:

To determine the current position of the cursor, use the GetConsoleScreenBufferInfo function.

一般来说,如果您知道如何获取或设置某些内容,该函数的 MSDN 文档将提示如何执行相反的操作。在这种情况下确实如此。

如果我们查找 GetConsoleScreenBufferInfo 函数,我们会发现我们已经成功了。它填写了一个 CONSOLE_SCREEN_BUFFER_INFO structure其中,它包含一个 COORD 结构,指示光标的当前列和行坐标。

甚至还有an example .如果你想方便的话,可以打包成一个函数:

COORD GetConsoleCursorPosition(HANDLE hConsoleOutput)
{
    CONSOLE_SCREEN_BUFFER_INFO cbsi;
    if (GetConsoleScreenBufferInfo(hConsoleOutput, &cbsi))
    {
        return cbsi.dwCursorPosition;
    }
    else
    {
        // The function failed. Call GetLastError() for details.
        COORD invalid = { 0, 0 };
        return invalid;
    }
}

正如 Michael 在评论中已经提到的,GetCursorPos 不起作用,因为它用于鼠标 光标(箭头),而不是光标(插入点)控制台窗口。它返回有效值,而不是您要查找的值。幸运的是返回类型不同,否则它们很容易混淆。将它称为控制台窗口的“光标”有点误导,它可能应该称为脱字符

关于c++ - 如何在控制台窗口中找到光标的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800020/

相关文章:

c++ - 检查类型是否来自特定命名空间

c++ - 处理基类子对象的表达式的动态类型

windows - 使用 Win32 API 找出图标资源中的图标数量

c++ - Direct2d + winapi 矩形未完全填充

c++ - 列表迭代器 + 运算符

c++ - 理解 Thrust 中的二元谓词

windows - Docker for Windows - 容器域名无法解析

c++ - 我如何在源代码中找到一个仍在等待的被破坏的线程?

c++ - EnumDesktopWindows (C++) 大约需要 30 分钟才能在 Windows 10 上找到所需的打开窗口

C: 如何获取Windows目录下的文件列表?