Иллюстрированный самоучитель по задачам и примерам Assembler

Окно консоли и экранный буфер

Структура CONSOLESCREENBUFFERINFO имеет следующий вид:

typedef struct _CONSOLE_SCREEN_BUFFER_INFO
COORD dwSize:
:размер экранного буфера в колонках и строках COORD dwCursorPosition:
//координаты столбца и строки курсора в экранном буфере
WORD wAttributes: //цвет фона и текста, с которыми записываются
//и отображаются символы в экранном буфере функциями
//WriteFile\WriteConsole и ReadFile\ReadConsole
SMALL_RECT srWindow; // определяет структуру
SMALL_RECT. которая содержит координаты
// левого верхнего и нижнего правого углов экранного буфера,
//видимого в окне консоли на экране дисплея COORD dwMaximumWindowSize;
//определяет максимальный размер окна консоли
//с учетом текущего размера экранного буфера и шрифт } CONSOLE_SCREEN_BUFFER_INFO:

Для приложения интерес, в частности, может представлять параметр srWindow с координатами видимой части экранного буфера. Далее, руководствуясь действиями пользователя (выполняющего прокрутку окна или изменение его размера) по отношению к окну консоли, приложение может изменять значения в структуре SMALLRECT и передавать ее на вход функции SetConsoleWindowInfo, которая устанавливает текущий размер и позицию окна консоли относительно экранного буфера.

B00L SetConsoleWindowInf0ChANDLE hConsoleOutput.
B00L bAbsolute. CONST SMALL RECT *lpConsoleWindow);

Параметрами этой функции являются:.

  • hConsoleOutput – дескриптор экранного буфера, созданного функцией CreateConsoleScreenBuffer; дескриптор должен иметь тип доступа GENERIC_WRITE;
  • bAbsolute – определяет порядок использования координат в структуре, указанной параметром lpConsoleWindow; если bAbsolute=1 (истина), то координаты определяют новые левую верхнюю и нижнюю правую углы окна; если bAbsolute=0 (ложь), то координаты – смещения относительно текущих координат углов окна;
  • lpConsoleWindow – указатель на структуру SMALL_RECT, в которую записывается информация о новых координатах экранного буфера.

Структура SMALL_RECT имеет следующий вид:

typedef struct _SMALL_RECT {
SHORT Left; //х-координата верхнего левого угла
SHORT Top: //у-координата верхнего левого угла
SHORT Right: //х-координата нижнего правого угла
SHORT Bottom: //у-координата нижнего правого угла } SMALL_RECT:

При работе с функцией SetConsoleWindowInfo следует иметь в виду, что она возвращает ошибку (нулевое значение), если координаты видимой части экранного буфера указывают за его действительные границы. Максимально допустимый раз мер окна для данной консоли можно получить с помощью функции GetConsoleScreenBufferlnfo. Таким образом, обе эти функции можно использовать для листания экранного буфера.

Для закрытия экранного буфера используется функция CloseHandle, которой передается дескриптор закрываемого экранного буфера.

B00L CloseHandle(HANDLE hObject);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.