700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言控制台窗口图形界面编程(五).

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

时间:2022-01-14 20:12:07

相关推荐

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

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

BOOLScrollConsoleScreenBuffer(//文本移动函数HANDLEhConsoleOutput,//句柄constSMALL_RECT*lpScrollRectangle,//移动区域constSMALL_RECT*lpClipRectangle,//裁剪区域,如果为NULL,那么将代表整个屏幕缓冲区COORDdwDestinationOrigin,//移动到的位置,这个点将成为移动区域的左上顶点constCHAR_INFO*lpFill//空出区域的填充字符);

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

#include<stdio.h>#include<conio.h>#include<Windows.h>#include<stdlib.h>intmain(){HANDLEhandle_out=GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出设备句柄CONSOLE_SCREEN_BUFFER_INFOcsbi;//定义窗口缓冲区信息结构体SMALL_RECTscroll;//定义移动区域COORDpos={0,5};//移动位置CHAR_INFOchFill;//定义填充字符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);//移动文本return0;}

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

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

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

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

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

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

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

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

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

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。