Как убрать полосы прокрутки в консольных окнах C++
Я проверял некоторые игры типа Rogue (Larn, Rogue и т. Д.), Написанные на C и C++, и заметил, что у них нет полос прокрутки справа от окна консоли.
Как я могу выполнить эту функцию?
4 ответа
Решение
Эти ребята показывают, как это сделать:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
HANDLE hOut;
CONSOLE_SCREEN_BUFFER_INFO SBInfo;
COORD NewSBSize;
int Status;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hOut, &SBInfo);
NewSBSize.X = SBInfo.dwSize.X - 2;
NewSBSize.Y = SBInfo.dwSize.Y;
Status = SetConsoleScreenBufferSize(hOut, NewSBSize);
if (Status == 0)
{
Status = GetLastError();
cout << "SetConsoleScreenBufferSize() failed! Reason : " << Status << endl;
exit(Status);
}
GetConsoleScreenBufferInfo(hOut, &SBInfo);
cout << "Screen Buffer Size : ";
cout << SBInfo.dwSize.X << " x ";
cout << SBInfo.dwSize.Y << endl;
return 0;
}
Вам необходимо сделать экранный буфер консоли того же размера, что и окно консоли. Получите размер окна с помощью GetConsoleScreenBufferInfo, члена srWindow. Установите размер буфера с помощью SetConsoleScreenBufferSize().
С использованием
#include <winuser.h>
, вы можете просто сделать
ShowScrollBar(GetConsoleWindow(), SB_VERT, 0);
Вы можете указать, какую полосу прокрутки скрыть, используя различные параметры.
Мы можем сделать буфер экрана консоли того же размера, что и окно консоли, выполнив следующие действия:
CONSOLE_SCREEN_BUFFER_INFO screenBufferInfo;
// Get console handle and get screen buffer information from that handle.
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &screenBufferInfo);
// Get rid of the scrollbar by setting the screen buffer size the same as the console window size.
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD new_screen_buffer_size;
// temp_screenBufferInfo.srWindow allows us to obtain the width and height info of the visible console in character cells.
// That visible portion is what we want to set the screen buffer to, so that no scroll bars are needed to view the entire buffer.
new_screen_buffer_size.X = screenBufferInfo.srWindow.Right - screenBufferInfo.srWindow.Left + 1; // Columns
new_screen_buffer_size.Y = screenBufferInfo.srWindow.Bottom - screenBufferInfo.srWindow.Top + 1; // Rows
// Set new buffer size
SetConsoleScreenBufferSizehConsole, new_screen_buffer_size);