Я собираюсь задать тот же вопрос, что и бесчисленное множество людей до меня. Я пробовал каждое решение, но каждый раз получаю один и тот же результат. Я создаю консольный игровой движок и хочу улучшить частоту кадров с помощью Windows API. Однако теперь, когда у меня есть вращающиеся полигоны и тому подобное, я понимаю, что консоль изменяет свой размер, когда запрошенный размер увеличивается примерно на 100 x 100 символов. Когда это происходит, размер консоли изменяется примерно до 50 x 25, а экранный буфер показывает абсолютную тарабарщину, когда я прокручиваю вправо.
На данный момент я предоставлю только соответствующий код, но если кому-то понадобится больше, я был бы рад добавить его.
m_width = width;
m_height = height;
m_hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
m_hConsoleIn = GetStdHandle(STD_INPUT_HANDLE);
if (m_hConsole == INVALID_HANDLE_VALUE)
log += "Invalid std output console handle\n";
COORD bottemRight = { (signed)width, (signed)height };
if (!SetConsoleScreenBufferSize(m_hConsole, bottemRight))
log += "Error setting screen size\n";
m_screenBound = { 0, 0, (signed)width - 1, (signed)height - 1 };
if (!SetConsoleWindowInfo(m_hConsole, TRUE, &m_screenBound))
log += "Error initializing window info\n";
if (!SetConsoleActiveScreenBuffer(m_hConsole))
log += "Error setting active screen buffer\n";
Я также пробовал решение HWND:
HWND hwnd = GetConsoleWindow();
RECT rect = { 0, 0, width, height };
MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
Я попытался переключить установщик информации об окне и установщик размера буфера экрана и изменил прямоугольник информации об окне на {0, 0, 1, 1}, чтобы не превалировать. Результат почти такой же, как вы видите на картинках выше. Заранее спасибо!
SetConsoleScreenBufferSize function
: указанные ширина и высота не могут быть меньше, чем ширина и высота окна экранного буфера консоли. Указанные размеры также не могут быть меньше минимального размера, разрешенного системой. Этот минимум зависит от текущего размера шрифта для консоли (выбранного пользователем) и значенийSM_CXMIN
иSM_CYMIN
, возвращаемых функциейGetSystemMetrics
. - person Rita Han   schedule 30.07.2019SetConsoleScreenBufferSize
не работает, вызовитеGetLastError
, чтобы получить код ошибки. - person Rita Han   schedule 30.07.2019GetSystemMetrics(SM_CXMIN)
иGetSystemMetrics(SM_CYMIN)
? - person Rita Han   schedule 05.08.2019