控制台双缓冲技术

简介

双缓冲技术主要使用在绘图方面,不过,借鉴双缓冲技术的原理,可以让你的控制台程序优势更加优秀的体验,例如你编写的控制台游戏,往往需要不停地刷新屏幕,这时候会造成非常严重的问题-----屏幕闪烁!这极大的降低了用户体验(虽然说没什么用户吧,但这并不妨碍我们追求完美嘛~),双缓冲就可以消除这种闪烁

 

控制台双缓冲技术原理:

背景知识:你所看到的黑色界面所显示的东西 都是在"屏幕缓冲区"中显示的,我们能看的这个缓冲区,叫做"当前(激活的)屏幕缓冲区",我们可以创建其他缓冲区,也可以对其进行操作,但是是不可见的.

原理介绍:

新建一个屏幕缓冲区(此时不可见)

在新建的屏幕缓冲区中写入想要一次显示的内容

把该缓冲区设置为当前缓冲区(可见)

---->为什么能解决闪屏问题?

       解释:假设你在屏幕上打印一系列11111111111111111111111111111111111111111111111111111,如果你是采用循环printf("1")来实现的,那么实际情况是屏幕上先输出1然后11接着111,,以此类推,我们看到了写的过程,再这样的过程中我们就会感到闪烁了,如果这么多1是一下子显示出来的,就不会有闪烁,双缓冲吧写的过程放在不可见的屏幕缓冲区中,一次性展示出来,就解决了闪烁问题.

具体实现:

---------------------------------创建屏幕缓冲区--------------------------------------

  1. HANDLE hNewConsole = CreateConsoleScreenBuffer(GENERIC_WRITE | GENERIC_READ,
  2.          0,
  3.          NULL, 
  4.          CONSOLE_TEXTMODE_BUFFER,
  5.          NULL);

 

------------------------------------可选项:隐藏光标---------------------------------------

 

  1.         CONSOLE_CURSOR_INFO cci = {1, 0};
  2.         SetConsoleCursorInfo(hNewConsole, &cci); 

---------------------------------写入你想要显示的东西---------------------------------------

 WriteConsole(hNewConsole, "这里是字符串", strlen(p), NULL, NULL);

------------------------------------------激活--------------------------------------------------

  1.         SetConsoleActiveScreenBuffer(hNewConsole);

 

posted @ 2015-09-05 16:02 Smalldy 阅读(...) 评论(...) 编辑 收藏