Windows консоль. Перевод строки.

Тема в разделе "WASM.WIN32", создана пользователем s3dworld, 28 ноя 2011.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Всем доброго вечера!

    Работаю с консолью посредством Win32 API, используя следующие функции:

    - GetStdHandle();
    - SetConsoleScreenBufferInfoEx();
    - FillConsoleOutputCharacter();
    - FillConsoleOutputAttribute();
    - SetConsoleCursorPosition();
    - SetConsoleTextAttribute();
    - WriteConsole()

    Устанавливаю размер буфера и ряд других параметров:

    Код (Text):
    1. CONSOLE_SCREEN_BUFFER_INFOEX consoleScreenBufferInfo;
    2.  
    3. memset(&consoleScreenBufferInfo,0,sizeof(CONSOLE_SCREEN_BUFFER_INFOEX));
    4.  
    5. consoleScreenBufferInfo.cbSize=sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
    6. consoleScreenBufferInfo.dwSize=size;
    7. consoleScreenBufferInfo.dwCursorPosition=cursorPosition;
    8. consoleScreenBufferInfo.wAttributes=FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
    9. consoleScreenBufferInfo.srWindow=windowRect;
    10. consoleScreenBufferInfo.dwMaximumWindowSize=size;
    11. consoleScreenBufferInfo.wPopupAttributes=FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
    12. consoleScreenBufferInfo.bFullscreenSupported=false;
    13.  
    14. for(unsigned int i=0;i<16;i++) consoleScreenBufferInfo.ColorTable[i]=colors[i];
    При этом размеры окна рассчитываю на основании размера символа (получаю его через GetCurrentConsoleFontEx()). Так же устанавливаю максимальный размер окна (и интересно, а минимальный размер окна можно установить?). Размер буфера (переменная size) я устанавливаю 80x25. Вроде всё нормально. Начинаю выводить текст "Hello" (5 символов) начиная с позиции (77,24). В результате получаю перенос на новую строку, при этом затирается верхняя строка. Оттащим вывод немного назад, на (75,24), и у нас весь текст умещается в текущей строки, но курсор автоматически переводится на новую строку, затирая первую. Всё бы нормально, но мне надо чтобы у меня была ASCII-графика (псевдографика).

    [​IMG]

    Вопрос: как мне отменить затирание буфера? Конечно же можно контролировать размер выводимой строки и отрезать то что уйдёт. Но всё равно, если использовать самую крайнюю ячейку (79,24), то курсор автоматически сдвинется на новую строку.

    PS: Пробовал скрывать курсор посредством SetConsoleCursorInfo() - проблему не решает.
     
  2. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    s3dworld Попробуйте ввод\вывод через WriteConsoleOutput\ReadConsoleOutput