生活随笔
收集整理的這篇文章主要介紹了
控制台双缓冲防闪烁--功能封装
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用時,將包括#define DATALEN 10000的語句以及整個類、全局變量scrbuf的定義都拷貝到你的代碼文件中。
默認不開啟雙緩沖。
- 調用scrbuf.on()開始雙緩沖模式
- 此模式下,輸出文字不會立即顯示在屏幕上。
需要手動調用scrbuf.update()剛才輸入的內容(包括system(“cls”)操作)才會顯示在屏幕上。 - 調用scrbuf.off()關閉雙緩沖模式
#include<bits/stdc++.h>
#include<Windows.h>
using namespace std
;
#define DATALEN 10000
class ScreenBuff{
public:HANDLE hOutput
;HANDLE hOutBuf
;COORD coord
={0,0};DWORD bytes
;bool isOn
;char data
[DATALEN
];ScreenBuff(){bytes
= 0;hOutput
=GetStdHandle(STD_OUTPUT_HANDLE
);hOutBuf
= CreateConsoleScreenBuffer(GENERIC_READ
| GENERIC_WRITE
, FILE_SHARE_READ
| FILE_SHARE_WRITE
, NULL, CONSOLE_TEXTMODE_BUFFER
, NULL);CONSOLE_CURSOR_INFO cci
;cci
.bVisible
=0;cci
.dwSize
=1;SetConsoleCursorInfo(hOutput
, &cci
);SetConsoleCursorInfo(hOutBuf
, &cci
);}void on(){isOn
= true;SetConsoleActiveScreenBuffer(hOutBuf
);}void off(){isOn
= false;SetConsoleActiveScreenBuffer(hOutput
);}void update(){if(isOn
){ReadConsoleOutputCharacterA(hOutput
, data
, DATALEN
, coord
, &bytes
);WriteConsoleOutputCharacterA(hOutBuf
, data
, DATALEN
, coord
, &bytes
);}}
}scrbuf
;
int main()
{scrbuf
.on();while (1){for (char c
='a'; c
<'z'; c
++){system("cls");for (int i
=0; i
<800; i
++){printf("%c",c
);}scrbuf
.update();}}scrbuf
.off();return 0;
}
總結
以上是生活随笔為你收集整理的控制台双缓冲防闪烁--功能封装的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。