如何解决VS2019全屏控制台输出窗口存在大量多余空白的问题
你遇到的控制台全屏后右侧有多余空白、行列比例不符合预期的问题,根源是控制台默认的屏幕缓冲区宽度远大于全屏窗口的实际可显示宽度,你当前的代码仅设置了控制台进入全屏显示模式,但没有同步调整缓冲区大小,缓冲区多出的宽度区域就表现为不可用的空白,也会导致行列计数和预期不符。
解决方法
在设置全屏显示模式后,主动将屏幕缓冲区的宽高调整为和当前全屏窗口的实际行列数完全一致,消除多余的缓冲区域即可。
修改后的完整代码如下:
#include <stdlib.h> #include <stdio.h> #include <iostream> #include <Windows.h> #include <string> using namespace std; int main() { HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); // 先设置全屏模式 SetConsoleDisplayMode(hOutput, CONSOLE_FULLSCREEN_MODE, 0); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hOutput, &csbi); int WindowColumns = csbi.srWindow.Right - csbi.srWindow.Left + 1; int WindowRows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; // 新增:将屏幕缓冲区大小设置为和全屏窗口行列完全匹配,消除多余空白 COORD bufferSize = { (SHORT)WindowColumns, (SHORT)WindowRows }; SetConsoleScreenBufferSize(hOutput, bufferSize); // 重新获取确认尺寸 GetConsoleScreenBufferInfo(hOutput, &csbi); WindowColumns = csbi.srWindow.Right - csbi.srWindow.Left + 1; WindowRows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; cout << WindowColumns << "," << WindowRows << endl; system("pause"); return 0; }
补充说明
- 调整后控制台将没有多余的缓冲区空间,也不会出现横向滚动条,行列比例会和你当前屏幕分辨率的宽高比匹配。
- 如果行列比例仍和预期有偏差,可以通过修改控制台默认字体大小调整,等宽字体的单字符宽高比也会影响最终的行列计数。
- 如果是在VS调试环境下运行,可右键点击控制台标题栏,选择「属性」-「布局」,手动取消「由系统调整窗口大小」选项,避免VS默认配置覆盖代码设置。
内容的提问来源于stack exchange,提问作者user16778894
相关产品推荐
相关产品推荐

