⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textmode.c

📁 推荐刚刚开始学C语言的同志们看下
💻 C
字号:
#include <conio.h>
#include <dos.h>
#include <stdlib.h>

#define VIDEO_BIOS     0x10 /*int 10h是bios中对视频函数的调用*/

int	setfont8x8(int); /*设置不同的显示模式*/
void	setstdfont(int); /*恢复成系统默认的显示模式*/

void 	main(void)
{
int	lines,i;

	lines = setfont8x8(C80); /*设置8X8点阵,每行80字符的显示模式,并获取可显示的最大行数*/
	textattr(WHITE); /*textattr()函数设置字符模式下窗口的前景色和背景色*/
	clrscr(); /*清除屏幕*/
	if (lines < 43) {
		textattr(LIGHTRED);
		cprintf("\n\r没有发现EGA或VGA驱动 ...\n\r"); /*cprintf()的功能是向窗口输出文本*/
		exit(1);
	}
	window(20,15,70,35); /*画字符模式窗口,4个参数依次为左,上,右,下的位置*/
	textattr((RED<<4)+WHITE); /*把窗口设置成前景色为白色,背景色为红色*/
	clrscr();
	for (i=1;i<=lines;i++) { /*循环输出最多能输出的行数*/
		cprintf("\n\r 第 %d  行",i);
		delay(200); /*每输出一行,等待200ms*/
	}
	getch(); /*等待用户输入一个字符*/
	window(1,1,80,lines); /*重新设置窗口*/
	textattr(LIGHTGRAY<<4); /*将窗口背景色设置为灰色*/
	clrscr();
	cprintf("\n\r 全屏幕 80x%d 行显示模式\n\r",lines);
	getch(); 

	lines = setfont8x8(C40); /*将窗口设置为每行40个字符的显示模式*/
	textattr((BLUE<<4)+LIGHTGREEN); /*设置窗口,前景亮绿色,背景蓝色*/
	clrscr();
	cprintf("\n\r 也可以使用 40x%d 的模式\n\r",lines);
	getch();

	setstdfont(C80); /*重新设置成标准的每行80字符的显示模式*/
	clrscr();
	cprintf("\n\r 恢复至正常 ...\n\r");
	exit(0);
}

int setfont8x8(mode)
int mode;
{
int maxlines,maxcol;
char vtype,displaytype;

	textmode(mode);  /*设置文本格式,mode含义为每行可以显示的字符数*/

	_AH = 0x0F;   /*int 10h的 0fh功能为获取当前的显示模式,执行后,每行可显示字符数保存在ah中*/
	geninterrupt(VIDEO_BIOS); /*geninterrupt()函数执行一个软中断,调用int 10h*/
	maxcol = _AH; /*获取每行可以显示的字符数*/

	_AX = 0x1A00;  /*int 10h的 1ah功能为获取当前的显示代码*/
	geninterrupt(VIDEO_BIOS);
	displaytype = _AL; /*int 10h返回后,al中为显示类型*/
	vtype       = _BL; /*bl中为显示器的类型*/

	if (displaytype == 0x1A) { /*可以直接获取最大行数*/
		switch (vtype) {
			case 4:
			case 5:  maxlines = 43;
						break;
			case 7:
			case 8:
			case 11:
			case 12: maxlines = 50;
						break;
			default: maxlines = 25;
						break;
		}
	}
	else { /*无法读取显示器的类型 */
		_AH = 0x12;  /*int 10h的 12h功能为选择显示器程序*/
		_BL = 0x10;
		geninterrupt(VIDEO_BIOS);

		if (_BL == 0x10)
			maxlines = 25;
		else
			maxlines = 43;
	}

	if (maxlines > 25) { /*如果可以设置更多的行*/
		_AX = 0x1112; /*以下的部分都是int 10h的11h号功能调用,作用是生成相应的显示字符*/
		_BL = 0;
		geninterrupt(VIDEO_BIOS);

		_AX = 0x1103;
		_BL = 0;
		geninterrupt(VIDEO_BIOS);
	}

	*((char *) &directvideo - 8) = maxlines; /*设置显示行数*/
	window(1,1,maxcol,maxlines); /*画出相应大小的窗口*/
	return(maxlines); /*返回可以设置的最大行数*/
}

void setstdfont(mode)
int mode;
{
	if (mode != LASTMODE)
		_AL = mode;
	else {
		_AH = 0x0F; /*获取当前显示模式*/
		geninterrupt(VIDEO_BIOS);
		mode = _AL;
	}

	_AH = 0; /*恢复成系统标准模式*/
	geninterrupt(VIDEO_BIOS);

	*((char *) &directvideo - 8) = 25; /*行数设置成25行*/
	textmode(mode); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -