控制台双缓冲防闪烁--功能封装
使用时,将包括#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(){//开启双缓冲后,在输出后必须调用update才能显示 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;
}
控制台双缓冲防闪烁--功能封装相关推荐
- Qt组件中的双缓冲无闪烁绘图
双缓冲绘图 在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图.使用双缓冲,可以减轻绘制的闪烁感.在有些情况下,用户要关闭双缓冲,自己管理绘图.下面的语句设置了窗口部件的Qt::WA_PaintOnS ...
- java 坦克重叠_【Java】我所知道坦克大战(单机版)之画出坦克的实心圆、让圆动起来、双缓冲解决闪烁问题...
28640发布于 今天 02:47 本篇文章目的 画出坦克的实心圆 让坦克圆动起来 双缓冲解决闪烁问题 一.画出代表坦克的实心圆 我们需要画出一个圆,那么可以使用fillOval方法 fillOval ...
- C++零食:WTL中使用双缓冲避免闪烁
双缓冲的原理可以这样形象的理解:把电脑屏幕看作一块黑板.首先我们在内存环境中建立一个"虚拟"的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制 ...
- Linux framebuffer双缓冲防止闪烁
昨天写了一篇文章: 使用Linux Framebuffer绘制32位真彩图形: https://blog.csdn.net/dog250/article/details/90113737 并发了朋友圈 ...
- directx 双缓冲 运动 闪烁_24期0利率 | BMW超值福袋开启“双11”购车狂欢节!!
BMW超值福袋开启"双11"购车狂欢节 24期0利率 首付一半开宝马 又到一年"双11",华晨宝马以十足的诚意,携新BMW X1.创新BMW X2以及BMW 1 ...
- java闪烁_java双缓冲解决屏幕闪烁
今天做实验,发现了屏幕闪烁问题,网上找到解决方法,在此谢谢原作者 转自http://blog.sina.com.cn/s/blog_611ca6300100ezfx.html Java的强大特性让其在 ...
- EGE基础入门篇(九):双缓冲与手动渲染
EGE专栏:EGE专栏 上一篇:EGE基础入门篇(八):清屏与重绘 下一篇: 文章目录 一.双缓冲机制 1. 单缓冲绘图 1.1 单缓冲绘图的缺点 1.2 系统读取帧缓冲 2. 双缓冲绘图 2.1 双 ...
- MFC绘制动态曲线,用双缓冲绘图技术防闪烁
转载自:ZHY_ongu的博客:MFC绘制动态曲线,用双缓冲绘图技术防闪烁 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线. 所谓动画,都是一帧一帧 ...
- [转载] MFC绘制动态曲线,用双缓冲绘图技术防闪烁
转载的原文地址 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线 所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的.所以如果你掌握了如何绘制静态曲线,那 ...
最新文章
- Java 常用类 -Arrays
- high speed train is awesome
- localsandbox 如何响应tile点击事件
- 什么是“GB/T ”? 计算机术语你又知道多少? 想不想别人听不懂的语言搞定别人!...
- NSD cisco高级路由与交换技术--2014.8.16
- es5创建对象与继承
- 北京户口 - 百度百科
- Java 基本数据类型存储位置
- U盘强制格式化的解决方案
- 联想笔记本BIOS设置中文详解
- ad怎么批量改元器件封装_ad中如何批量修改封装
- iOS之UITableViewController的使用
- leetcode报错reached end of file while parsing
- 微信调支付宝支付常见问题
- R语言学习笔记之str函数
- python-igraph创建网络(图)
- 互联网金融概念股龙头有哪些
- 详谈NVMe over Fabric技术发展简史
- Android图片海报制作-自定义文字排版控件组件
- C语言 结构体数组复制