Запись символов или цветов в последовательные ячейки


Символы или атрибуты цвета могут быть записаны в заданные символьные знакоместа в экранном буфере. Нижеследующий пример использует функцию WriteConsoleOutputCharacter, чтобы записать строку символов, начинающихся в верхнем левом угле экранного буфера. Далее пример использует функцию WriteConsoleOutputAttribute, чтобы записать строку атрибутов цвета для первых 51 ячейки той же самой строки. Параметр coord для обеих функций устанавливает символьное знакоместо в экранном буфере консоли, в котором начинается запись. Местоположение в консольном окне, где эти символы или цвета появляются, зависит от прямоугольника текущего окна экранного буфера консоли. За дополнительной информацией о соотношениях между экранным буфером и его окнами, обратитесь к статьям Окно и размер экранного буфера и Прокрутка экранного буфера.

Обратите внимание! на то,что MyErrorExit - групповой символ - заместитель для определяемой программой функции, которая показывает на экране и обрабатывает аварийные ситуации.
 
HANDLE hOutput;
    LPTSTR lpszString = "Character String";
    DWORD cWritten;
    BOOL fSuccess;
    COORD coord;
    WORD wColors[3], wColor;
    CHAR chFillChar;

// Запишем строку символов в буфер экрана.

    coord.X = 0;            // начало на первую ячейку
    coord.Y = 0;            // первой строки

    fSuccess = WriteConsoleOutputCharacter(
        hOutput,              // дескриптор экранного буфера
        lpszString,           // указатель на строку - источник
        lstrlen(lpszString),  // длина строки
        coord,                // первая ячейка для записи
        &cWritten);           // действительное число записей
    if (! fSuccess)
        MyErrorExit("WriteConsoleOutputCharacter");

// Запишем строку цветов в экранный буфер.

    wColors[0] = BACKGROUND_RED;
    wColors[1] = BACKGROUND_RED |     // белый фон
                 BACKGROUND_GREEN |
                 BACKGROUND_BLUE;
    wColors[2] = BACKGROUND_BLUE;

    for (;fSuccess && coord.X < 50; coord.X += 3)
    {
        fSuccess = WriteConsoleOutputAttribute(
            hOutput,          // дескриптор экранного буфера
            wColors,          // указатель на строку - источник
            3,                // длина строки
            coord,            // первая ячейка для записи
            &cWritten);       // действительное число записей
    }
    if (! fSuccess)
        MyErrorExit("WriteConsoleOutputAttribute");

Те же самые символы или атрибуты цвета можно записать в заданное число последовательных ячеек экранного буфера, начинающихся в заданном местоположении. Нижеследующий пример использует функцию FillConsoleOutputCharacter, чтобы очистить область экранного буфера 80 на 50 символов, а затем он использует функцию FillConsoleOutputAttribute, чтобы установить атрибуты цвета в тех же самых ячейках.

// Заполним область экранного буфера 80-на-50 символов пробелами.

    coord.X = 0;            // начнем с первой ячейки
    coord.Y = 0;            //   первой строки
    chFillChar = ' ';

    fSuccess = FillConsoleOutputCharacter(
        hStdout,          // дескриптор экранного буфера
        chFillChar,       // заполнение пробелами
        80*50,            // число ячеек для заполнения
        coord,            // первая ячейка для записи
        &cWritten);       // фактическое число записей

    if (! fSuccess)
        MyErrorExit("FillConsoleOutputCharacter");

// Установим в области экранного буфера 80-на-50 символов цвета для белого текста на красном.

    wColor = BACKGROUND_RED |
             FOREGROUND_RED |
             FOREGROUND_GREEN |
             FOREGROUND_BLUE;

    fSuccess = FillConsoleOutputAttribute(
        hStdout,          // дескриптор экранного буфера
        wColor,           // цвет для заполнения
        80*50,            // число заполняемых ячеек
        coord,            // первая ячейка для записи
        &cWritten);       // фактическое число записей

    if (! fSuccess)
        MyErrorExit("FillConsoleOutputAttribute"); 

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz