1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11
1

Изменить размер экранного буфера и окна консоли

29.06.2017, 02:48. Показов 5479. Ответов 5

Собственно, вопрос. Как изменить размер и окна консоли, и экранного буфера. Написал код, не работает. Или не изменяется размер буфера, либо не изменяется размер окна и появляются полосы прокрутки.
C++
1
2
3
4
5
6
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD bufferSize = {width, height};
    SMALL_RECT windowSize = {0, 0, width - 1, height - 1};
    
    SetConsoleScreenBufferSize(hStdOut, bufferSize);
    SetConsoleWindowInfo(hStdOut, true, &windowSize);
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2017, 02:48
Ответы с готовыми решениями:

Получение дескриптора экранного буфера консоли дочернего процесса
Здравствуйте. Можно ли и если можно , то как Получить дескриптор экранного буфера консоли дочернего...

Как изменить размер окна, а не только буфера
HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD crd = {18, 13}; SMALL_RECT src =...

Количество выводимых строк в консоли (размер буфера экрана)
Такая проблема - по умолчанию в Windows размер "буфера экрана" для консоли - 300 строк. Я вывожу...

Всплывающее окно. Частичное копирование буфера окна консоли
Пишу курсовой в VS2017, нужно реализовать что то вроде всплывающего окна : на экране консоли...

5
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
29.06.2017, 11:46 2
Цитата Сообщение от Joshua Jalowlew Посмотреть сообщение
Или не изменяется размер буфера, либо не изменяется размер окна и появляются полосы прокрутки.
Joshua Jalowlew, чему равны width, height, когда не изменяется размер буфера? При каких значениях width, height не изменяется размер окна? Какие значения при этом возвращают SetConsoleScreenBufferSize, SetConsoleWindowInfo?
Если произошла ошибка, то какой код ошибки выдает GetLastError?
0
1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11
29.06.2017, 13:06  [ТС] 3
чему равны width, height, когда не изменяется размер буфера? При каких значениях width, height не изменяется размер окна? Какие значения при этом возвращают SetConsoleScreenBufferSize, SetConsoleWindowInfo?
Если произошла ошибка, то какой код ошибки выдает GetLastError?
width и height как раз и являются размерами буфера, до его изменения они просто инициализируются его размером.
Если width и height больше текущего размера буфера, то все работает, и обе функции успешно завершаются.
Если width и height меньше текущего размера буфера, то все идет лесом:
C++
1
2
SetConsoleScreenBufferSize = false, error code: 87 (ERROR_INVALID_PARAMETER)
SetConsoleWindowInfo = true,  error code: 87 (ERROR_INVALID_PARAMETER)
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
29.06.2017, 16:30 4
Цитата Сообщение от Joshua Jalowlew Посмотреть сообщение
Если width и height меньше текущего размера буфера, то все идет лесом
SetConsoleScreenBufferSize = false, error code: 87 (ERROR_INVALID_PARAMETER)
SetConsoleScreenBufferSize function , ширина и высота буфера не могут быть меньше ширины и высоты окна.
The specified width and height ( of the buffer ) cannot be less than the width and height of the window.
0
1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11
29.06.2017, 19:09  [ТС] 5
Прочитал на msdn. А как тогда быть? Поменять функции местами - не работает, при увеличении буфера размер окна будет больше буфера, что тоже невозможно. Должно же быть адекватное решение?
0
1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11
12.07.2017, 15:24  [ТС] 6
Все, ответ найден. При изменении размеров нужно сначала задать минимальные значения как для окна, так и для экранного буфера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int w = 90, h = 40;
 
//Сначала задаем минимальные значения
SMALL_RECT zeroWindow = {0, 0, 0, 0};
COORD zBuffer = {1, 1};
SetConsoleWindowInfo(activeBuffer, TRUE, &zeroWindow); 
SetConsoleScreenBufferSize(activeBuffer, zBuffer);
 
//А уже потом изменяем значения на нужные нам
COORD bufferSize = {w, h};
SMALL_RECT windowSize = {0, 0, w - 1, h - 1};
SetConsoleScreenBufferSize(activeBuffer, bufferSize);
SetConsoleWindowInfo(activeBuffer, TRUE, &windowSize);
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2017, 15:24
Помогаю со студенческими работами здесь

Как зафиксировать размер окна в консоли ?
По иксам вроде зафиксирован, а игрик стягивается =( может какие то стили есть окна консоли ? ...

Изменить размер консоли и шрифтов
Подскажите, как в Си принудительно изменить размеры консоли и используемых шрифтов при запуске...

Как задать размер окна консоли (Windows)?
Хочу что-бы при запуске кода в консоли, окно консоли принимало статичный указанный размер в...

Как изменить размер текста в консоли
Как изменить размер текста в консоли (например, какую использовать системную команду, аналог...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru