控制文本的移动是控制台窗口界面编程的一个很重要的功能,有了这个功能我们可以实现界面的滚动。下面我们介绍一个控制文本移动的函数,如下:


  1. BOOL ScrollConsoleScreenBuffer(             //文本移动函数
  2. HANDLE hConsoleOutput,                  //句柄
  3. const SMALL_RECT *lpScrollRectangle,    //移动区域
  4. const SMALL_RECT *lpClipRectangle,      //裁剪区域,如果为NULL,那么将代表整个屏幕缓冲区
  5. COORD dwDestinationOrigin,              //移动到的位置,这个点将成为移动区域的左上顶点
  6. const CHAR_INFO *lpFill                 //空出区域的填充字符
  7. );

下面来看一个移动文本的样例程序,如下

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <Windows.h>
  4. #include <stdlib.h>
  5. int main()
  6. {
  7. HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //获得标准输出设备句柄
  8. CONSOLE_SCREEN_BUFFER_INFO csbi;        //定义窗口缓冲区信息结构体
  9. SMALL_RECT scroll;      //定义移动区域
  10. COORD pos = {0, 5};     //移动位置
  11. CHAR_INFO chFill;       //定义填充字符
  12. GetConsoleScreenBufferInfo(handle_out, &csbi);  //获得窗口缓冲区信息
  13. //定义填充字符的各个参数及属性
  14. chFill.Char.AsciiChar = ' ';
  15. chFill.Attributes = csbi.wAttributes;
  16. //输出文本
  17. printf("00000000000000000000000000000\n");
  18. printf("11111111111111111111111111111\n");
  19. printf("22222222222222222222222222222\n");
  20. printf("33333333333333333333333333333\n");
  21. //确定区域
  22. scroll.Left = 1;
  23. scroll.Top = 1;
  24. scroll.Right = 10;
  25. scroll.Bottom = 2;
  26. ScrollConsoleScreenBuffer(handle_out, &scroll, NULL, pos, &chFill); //移动文本
  27. return 0;
  28. }

在上面的样例程序中,裁剪区域是整个控制台窗口的屏幕缓冲区,现在如果我们把裁剪区域设定为与移动区域一样,也就是说ScrollConsoleScreenBuffer函数的第三个参数也改成&scroll,那么结果会怎么样呢?

为什么会发生这种现象呢?很明显示因为裁剪区域的设定问题,现在我们把裁剪区域依旧设定成移动区域,但是我们只把移动区域下移一行而不是移动在别的位置,看看会有什么现象发生?

现在我们应该可以猜想出结论了,别急,再做一个实验,现在我们将裁减区域又重新改为整个屏幕缓冲区,看看会有什么样的现象发生?

再来最后一个实验,我们将裁减区域减小为移动区域的上半部分,继续执行下移一行的操作,看看最终结果会怎么样?

好了,现在我们通过归纳可以得出几个结论了,那就是

一,裁减区域以外的区域不会受文本移动的影响。具体是:

1,裁减区域以外的区域不会被移动过来的区域覆盖,

2,裁减区域以外的区域被移动到他处之后原区域不发生变化,因此不需要填充字符。

总的归纳来说也就是原来是什么样子,文本移动后还是什么样子,不会改变。

二,裁减区域以内的区域受文本移动的影响。具体是:

1,当裁减区域以内的区域被移动到他处造成该区域为空时会被设定的字符填充,

2,裁减区域以内的区域会被移动过来的区域覆盖。

总的归纳来说也就是完全受文本移动的影响,移动过来就被覆盖,被移走就由设定的字符来填充。

转载于:https://www.cnblogs.com/lxl0928/p/3797834.html

C语言控制台窗口图形界面编程(五).相关推荐

  1. 如何打开电脑c语言窗口,C语言控制台窗口图形界面编程(五). -电脑资料

    控制文本的移动是控制台窗口界面编程的一个很重要的功能,有了这个功能我们可以实现界面的滚动, BOOL ScrollConsoleScreenBuffer(      //文本移动函数 HANDLE h ...

  2. C语言控制台窗口图形界面编程

    一:设置句柄与窗口信息 在Windows操作系统下用C语言编写控制台的窗口界面首先要获取当前标准输入和标准输出设备的句柄.通过调用函数GetStdHandle可以获取当前标准输入以及输出设备的句柄.函 ...

  3. C语言控制台窗口图形界面编程(七):键盘事件

    输入事件中的键盘事件通常有字符事件和按键事件,这些事件的附带信息构成了键盘输入的信息,而想要读取这些信息,是要通过API函数ReadConsoleInput来获取的,函数原型如下: 1 BOOL Re ...

  4. 【C语言】控制台窗口图形界面编程(一)句柄和文本属性

    00. 目录 文章目录 00. 目录 01. 句柄 02. GetStdHandle函数 03. CloseHandle函数 04. SetConsoleTextAttribute函数 05. 十进制 ...

  5. 【C语言】控制台窗口图形界面编程(三)窗口相关设置

    00. 目录 文章目录 00. 目录 01. GetConsoleTitle函数 02. SetConsoleTitle函数 03. SetConsoleScreenBufferSize函数 04. ...

  6. 【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区

    00. 目录 文章目录 00. 目录 01. COORD结构体 02. SMALL_RECT结构 03. CONSOLE_SCREEN_BUFFER_INFO结构体 04. GetConsoleScr ...

  7. 【C语言】控制台窗口图形界面编程(五):文本移动

    00. 目录 文章目录 00. 目录 01. CHAR_INFO结构 02. ScrollConsoleScreenBuffer函数 03. 程序示例 04. 官方参考程序 01. CHAR_INFO ...

  8. 【C语言】控制台窗口图形界面编程(七):鼠标事件

    00. 目录 文章目录 00. 目录 01. INPUT_RECORD结构 02. MOUSE_EVENT_RECORD结构 03. ReadConsoleInput函数 04. 示例程序 01. I ...

  9. 【C语言】控制台窗口图形界面编程(四):文本输出

    00. 目录 文章目录 00. 目录 01. FillConsoleOutputAttribute函数 02. FillConsoleOutputCharacter函数 03. WriteConsol ...

最新文章

  1. powerbook g4装linux,揭秘:服务器操作系统Linux版本发行
  2. 实验集锦二 路由器基础信息、查看命令及CDP
  3. 【JMAIL】jmail无法收邮件问题
  4. Server Error: 0×80070543,无法取得服务器的状态(role 和 features)
  5. 配置连接池druid
  6. MATLAB实战系列(三十)-MATLAB之M码正弦稳态电路建模仿真原理
  7. Microsoft SQL Server 2000清理LDF日志
  8. Pairwork2 总结
  9. maven中引入oracle驱动报错Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0
  10. amr文件转mp3 php,PHP 将微信录音arm格式文件转mp3格式
  11. 如何在 iPhone、iPad、iPod touch 或 Mac 更新 HomePod?
  12. protobuf的GZIP压缩
  13. 教育企业该如何搭建私域流量池
  14. 概率论在实际生活的例子_生活中有趣的概率论例子
  15. 手机java update_手机里的java菜单老是自动更新为什么啊
  16. matlab 求对称,matlab-线性代数 判断 矩阵的对称、实对称、反对称
  17. C1认证学习笔记2--计算机通识
  18. 请收起你的善良,越是心地善良的女人,通常命越差
  19. python作业答案用什么软件好_可以搜整本答案的软件 作业答案软件有哪些
  20. CAN总线之CAN ID过滤器分析

热门文章

  1. 3D深度估计,让视频特效更梦幻!
  2. 谷歌官方推出 TensorFlow 中文视频:机器学习从零到一(系列之二)
  3. CPU上跑深度学习模型,FPS也可以达100帧
  4. 在改善人类生活的路上,CV能做的还有很多!
  5. this java_Java this关键字详解
  6. 重磅!谷歌发布3D目标检测数据集及检测方案
  7. C++编程题积累——for循环判断条件陷阱
  8. jav中什么是组织java程序_Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指()。A.Java调试器B.Java剖析工具C.Jav...
  9. Arcgis用字段计算器计算只出一部分值另外一部分为null
  10. html resize 最小,Html5 Canvas resize