Окно консоли и экранный буфер
Структура 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);