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)