副标题#e#
节制文本的移动是节制台窗口界面编程的一个很重要的成果,有了这个成果我们可以实现界面的转动。下面我们先容一个节制文本移动的函数,如下:
BOOL ScrollConsoleScreenBuffer( //文本移动函数 HANDLE hConsoleOutput, //句柄 const SMALL_RECT *lpScrollRectangle, //移动区域 const SMALL_RECT *lpClipRectangle, //裁剪区域,假如为NULL,那么将代表整个屏幕缓冲区 COORD dwDestinationOrigin, //移动到的位置,这个点将成为移动区域的左上极点 const CHAR_INFO *lpFill //空出区域的填充字符 );
下面来看一个移动文本的样例措施,如下
#include <stdio.h> #include <conio.h> #include <Windows.h> #include <stdlib.h> int main() { HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //得到尺度输出设备句柄 CONSOLE_SCREEN_BUFFER_INFO csbi; //界说窗口缓冲区信息布局体 SMALL_RECT scroll; //界说移动区域 COORD pos = {0, 5}; //移动位置 CHAR_INFO chFill; //界说填充字符 GetConsoleScreenBufferInfo(handle_out, &csbi); //得到窗口缓冲区信息 //界说填充字符的各个参数及属性 chFill.Char.AsciiChar = ' '; chFill.Attributes = csbi.wAttributes; //输出文本 printf("00000000000000000000000000000\n"); printf("11111111111111111111111111111\n"); printf("22222222222222222222222222222\n"); printf("33333333333333333333333333333\n"); //确定区域 scroll.Left = 1; scroll.Top = 1; scroll.Right = 10; scroll.Bottom = 2; ScrollConsoleScreenBuffer(handle_out, &scroll, NULL, pos, &chFill); //移动文本 return 0; }
在上面的样例措施中,裁剪区域是整个节制台窗口的屏幕缓冲区,此刻假如我们把裁剪区域设定为与移动区域一样,也就是说ScrollConsoleScreenBuffer函数的第三个参数也改成&scroll,那么功效会怎么样呢?
本栏目
#p#副标题#e#
为什么会产生这种现象呢?很明昭示因为裁剪区域的设定问题,此刻我们把裁剪区域依旧设定成移动区域,可是我们只把移动区域下移一行而不是移动在此外位置,看看会有什么现象产生?
此刻我们应该可以意料出结论了,别急,再做一个尝试,此刻我们将减少区域又从头改为整个屏幕缓冲区,看看会有什么样的现象产生?
再来最后一个尝试,我们将减少区域减小为移动区域的上半部门,继承执行下移一行的操纵,看看最终功效会怎么样?
好了,此刻我们通过归纳可以得出几个结论了,那就是
一,减少区域以外的区域不会受文本移动的影响。详细是:
1,减少区域以外的区域不会被移动过来的区域包围,
2,减少区域以外的区域被移动到他处之后原区域不产生变革,因此不需要填充字符。
总的归纳来说也就是本来是什么样子,文本移动后照旧什么样子,不会改变。
二,减少区域以内的区域受文本移动的影响。详细是:
1,当减少区域以内的区域被移动到他处造成该区域为空时会被设定的字符填充,
2,减少区域以内的区域会被移动过来的区域包围。
总的归纳来说也就是完全受文本移动的影响,移动过来就被包围,被移走就由设定的字符来填充。
From:cnblogs 龙梦之痕