Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
 Аватар для Joshua Jalowlew
1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11

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

29.06.2017, 02:48. Показов 7887. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.06.2017, 02:48
Ответы с готовыми решениями:

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

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

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

5
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
29.06.2017, 11:46
Цитата Сообщение от Joshua Jalowlew Посмотреть сообщение
Или не изменяется размер буфера, либо не изменяется размер окна и появляются полосы прокрутки.
Joshua Jalowlew, чему равны width, height, когда не изменяется размер буфера? При каких значениях width, height не изменяется размер окна? Какие значения при этом возвращают SetConsoleScreenBufferSize, SetConsoleWindowInfo?
Если произошла ошибка, то какой код ошибки выдает GetLastError?
0
 Аватар для Joshua Jalowlew
1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11
29.06.2017, 13:06  [ТС]
чему равны 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
Цитата Сообщение от 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
 Аватар для Joshua Jalowlew
1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11
29.06.2017, 19:09  [ТС]
Прочитал на msdn. А как тогда быть? Поменять функции местами - не работает, при увеличении буфера размер окна будет больше буфера, что тоже невозможно. Должно же быть адекватное решение?
0
 Аватар для Joshua Jalowlew
1 / 1 / 0
Регистрация: 16.02.2017
Сообщений: 11
12.07.2017, 15:24  [ТС]
Все, ответ найден. При изменении размеров нужно сначала задать минимальные значения как для окна, так и для экранного буфера
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2017, 15:24
Помогаю со студенческими работами здесь

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

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

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

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

Как изменить размер текста в консоли
Как изменить размер текста в консоли (например, какую использовать системную команду, аналог system("color 00") для изменения...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru