我使用以下代码为光标指定了一些坐标:
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/