在Win32控制台应用程序中设置光标位置

Jim*_*ell 15 c++ console-application cursor-position

如何在Win32控制台应用程序中设置光标位置?最好,我想避免使用Windows控制台功能.(我整个上午都在那条黑暗的小巷里奔跑;它造成的问题多于解决的问题.)我似乎回忆起当我在大学时使用stdio相对简单,但我现在找不到任何如何做的例子.任何想法或建议将不胜感激.谢谢.

额外细节

这是我现在要做的事情:

COORD pos = {x, y};
HANDLE hConsole_c = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL );
char * str = "Some Text\r\n";
DWDORD len = strlen(str);

SetConsoleCursorPosition(hConsole_c, pos);
WriteConsole(hConsole_c, str, len, &dwBytesWritten, NULL);
CloseHandle(hConsole_c)
Run Code Online (Sandbox Code Playgroud)

文本字符串str永远不会发送到屏幕.我还应该做些什么吗?谢谢.

Jer*_*fin 15

使用控制台功能,您可以使用SetConsoleCursorPosition.没有它们(或者至少不直接使用它们),你可以使用像ncurses库gotoxy中的东西.

编辑:它的包装非常简单:

// Untested, but simple enough it should at least be close to reality...
void gotoxy(int x, int y) { 
    COORD pos = {x, y};
    HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(output, pos);
}
Run Code Online (Sandbox Code Playgroud)


cpx*_*cpx 11

请参阅SetConsoleCursorPosition API

编辑:

使用WriteConsoleOutputCharacter()将控制台中的活动缓冲区的句柄移动,并允许您设置其位置.

int x = 5; int y = 6;
COORD pos = {x, y};
HANDLE hConsole_c = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleActiveScreenBuffer(hConsole_c);
char *str = "Some Text\r\n";
DWORD len = strlen(str);
DWORD dwBytesWritten = 0;
WriteConsoleOutputCharacter(hConsole_c, str, len, pos, &dwBytesWritten);
CloseHandle(hConsole_c);
Run Code Online (Sandbox Code Playgroud)