ITEEDU

第二章 文本窗口

第二节 窗口内文本的输入输出函数

1、窗口内文本的输出函数 

  • int cprintf("<格式化字符串>", <变量表>); 
  • int cputs(char *string); 
  • int putch(int ch); 
  • cprintf() 函数输出一个格式化的字符串或数值到窗口中。它与printf()函数的用法完全一样,区别在于cprintf() 函数的输出受窗口限制,而printf() 函数的输出为整个屏幕。
  • cputs()函数输出一个字符串到屏幕上,它与puts()函数用法完全一样,只是受窗口大小的限制。
  • putch()函数输出一个字符到窗口内。

注意:

  • (1)使用以上几种函数,当输出超出窗口的右边界时会自动转到下一行的开始处继续输出。当窗口内填满内容仍没有结束输出时,窗口屏幕将会自动逐行上卷直到输出结束为止。
  • (2)窗口内文本的输入函数int getche(void); 该函数在前面已经讲过,需要说明的是,getche()函数从键盘上获得一个字符,在屏幕上显示的时候,如果字符超过了窗口右边界,则会被自动转移到下一行的开始位置。

下面这个程序给上例中加入了一些文本的输出函数。

#include <stdio.h>
#include <conio.h>
int main()
{
	int i;
	char *c[]={"BLACK", "BLUE", "GREEN", "CYAN", "RED","MAGENTA", "BROWN", "LIGHTGRAY"};
	textbackground(0); /* 设置屏幕背景色 */
	clrscr(); /* 清除文本屏幕 */
	for(i=1; i<8; i++)
	{
		window(10+i*5,5+i,30+i*5,15+i); /* 定义文本窗口 */
		textbackground(i); /* 定义窗口背景色 */
		clrscr(); /* 清除窗口 */
	}
	getch();
	return 0;
}

2、有关屏幕操作的函数

void clrscr(void); 清除当前窗口中的文本内容, 并把光标定位在窗口的左上角(1, 1)处。 void clreol(void); 清除当前窗口中从光标位置到行尾的所有字符, 光标位置不变。

 void gotoxy(x, y); 该函数很有用, 它用来定位光标在当前窗口中的位置。这里x,y是指光标要定位处的坐标(相对于窗口而言),当x,y超出了窗口的大小时,该函数就不起作用了。

int gettext(int xl,int yl,int x2,int y2,void *buffer);<   
int puttext(int x1,int y1,int x2,int y2,void *buffer);

gettext()函数是将屏幕上指定的矩形区域内文本内容存入buffer 指针指向的一个内存空间。

内存的大小用下式计算: 所用字节大小=行数*列数*2

其中:行数=y2-y1+1 列数=x2-x1+1 puttext()函数则是将gettext()函数存入内存buffer中的文字内容拷贝到屏幕上指定的位置。

int movetext(int x1, int x2, int y2, int x3, int y3); 

movetext()函数将屏幕上左上角为(x1, y1),右下角为(x2, y2)的一矩形窗口内的文本内容拷贝到左上角为(x3, y3)的新的位置。该函数的坐标也是相对于整个屏幕而言的。

注意:

  • (1) gettext()函数和puttext() 函数中的坐标是对整个屏幕而言的, 即是屏幕的绝对坐标,而不是相对窗口的坐标。
  • (2) movetext()函数是拷贝而不是移动窗口区域内容, 即使用该函数后, 原位置区域的文本内容仍然存在。
#include<conio.h>
main()
{
	int i;
	char *f[]={"Load F3","Pick Alt-F3","New ",
		"Save F2","Write to ","Directory",
	"Change dir","Os shell ","Quit Alt-X"};
	char buf[11*16*2];
	clrscr();
	textcolor(YELLOW);
	textbackground(BLUE);
	clrscr();
	gettext(10, 2, 24, 11, buf);
	window(10, 2, 24, 11);
	textbackground(RED);
	textcolor(YELLOW);
	clrscr();
	for(i=0; i<9; i++)
	{
		gotoxy(1, i+1);
		cprintf("%s", f[i]);
	}
	getch();
	movetext(10, 2, 24, 11, 40, 10);
	puttext(10, 2, 24, 11, buf);
	getch();
}

下面再介绍一些函数: 

  • void highvideo(void); 设置显示器高亮度显示字符
  • void lowvideo(void); 设置显示器低亮度显示字符
  • void normvideo(void); 使显示器返回到程序运行前的显示方式
  • int wherex(void); 
  • int wherey(void);这两个函数返回当前窗口下光标的x,y坐标