简介
双缓冲技术主要使用在绘图方面,不过,借鉴双缓冲技术的原理,可以让你的控制台程序优势更加优秀的体验,例如你编写的控制台游戏,往往需要不停地刷新屏幕,这时候会造成非常严重的问题-----屏幕闪烁!这极大的降低了用户体验(虽然说没什么用户吧,但这并不妨碍我们追求完美嘛~),双缓冲就可以消除这种闪烁
控制台双缓冲技术原理:
背景知识:你所看到的黑色界面所显示的东西 都是在"屏幕缓冲区"中显示的,我们能看的这个缓冲区,叫做"当前(激活的)屏幕缓冲区",我们可以创建其他缓冲区,也可以对其进行操作,但是是不可见的.
原理介绍:
新建一个屏幕缓冲区(此时不可见)
在新建的屏幕缓冲区中写入想要一次显示的内容
把该缓冲区设置为当前缓冲区(可见)
---->为什么能解决闪屏问题?
解释:假设你在屏幕上打印一系列11111111111111111111111111111111111111111111111111111,如果你是采用循环printf("1")来实现的,那么实际情况是屏幕上先输出1然后11接着111,,以此类推,我们看到了写的过程,再这样的过程中我们就会感到闪烁了,如果这么多1是一下子显示出来的,就不会有闪烁,双缓冲吧写的过程放在不可见的屏幕缓冲区中,一次性展示出来,就解决了闪烁问题.
具体实现:
---------------------------------创建屏幕缓冲区--------------------------------------
- HANDLE hNewConsole = CreateConsoleScreenBuffer(GENERIC_WRITE | GENERIC_READ,
- 0,
- NULL,
- CONSOLE_TEXTMODE_BUFFER,
- NULL);
------------------------------------可选项:隐藏光标---------------------------------------
- CONSOLE_CURSOR_INFO cci = {1, 0};
- SetConsoleCursorInfo(hNewConsole, &cci);
---------------------------------写入你想要显示的东西---------------------------------------
WriteConsole(hNewConsole, "这里是字符串", strlen(p), NULL, NULL);
------------------------------------------激活--------------------------------------------------
- SetConsoleActiveScreenBuffer(hNewConsole);