Установка позиции курсора в консольном приложении Win32

Как я могу установить позицию курсора в Консольном приложении Win32? Предпочтительно, я хотел бы постараться не делать дескриптор и использовать Windows Console Functions. (Я потратил все утро бег что темная область; это создает больше проблем, чем это решает.) Я, кажется, вспоминаю выполнение этого относительно просто, когда я был в колледже с помощью 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)

Текстовая строка str никогда не отправляется в экран. Есть ли что-то еще, что я должен делать?Спасибо.

15
задан Jim Fell 28 April 2010 в 20:47
поделиться

4 ответа

См. 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);
11
ответ дан 1 December 2019 в 01:45
поделиться

Используя функции консоли, вы должны использовать SetConsoleCursorPosition . Без них (или, по крайней мере, не используя их напрямую) вы можете использовать что-то вроде gotoxy в библиотеке ncurses .

Правка: оболочка для него довольно тривиальна:

// 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);
}
15
ответ дан 1 December 2019 в 01:45
поделиться

Да, вы забыли позвонить SetConsoleActiveScreenBuffer . В чем именно заключалась цель создания собственного? Используйте GetStdHandle (STD_OUTPUT_HANDLE) , чтобы получить дескриптор существующей консоли.

4
ответ дан 1 December 2019 в 01:45
поделиться

Вы, вероятно, использовали кодовые последовательности исключений ANSI , которые не работают с 32-разрядными консольными приложениями Windows.

1
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: