程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用C中自帶的驅動去改變字體和顏色

使用C中自帶的驅動去改變字體和顏色

編輯:關於C語言

一.c語言中字體的問題

c語言中有兩種顯示方式,即文本方式和圖形方式。就我所知,只能在圖形方式下控制字體.

先看一下c中定義的幾種字體

名稱 索引值 字體說明

default_font 0 8x8 bit-mapped font

triplex_font 1 stroked triplex font

small_font 2 stroked small font

sans_serif_font 3 stroked sans-serif font

gothic_font 4 stroked gothic font

(字體說明中的英文解釋無須明白,在例子的演示中去看)

請看例子(摘自tc3.0的聯機幫助文件)

例一.

#include
#include
#include
#include
/* the names of the text styles supported */
char *fname[] = { "default font",
"triplex font",
"small font",
"sans serif font",
"gothic font"
};
int main(void)
{
/* request auto detection */
int gdriver = detect, gmode, errorcode;
int style, midx, midy;
int size = 1;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grok) /* an error occurred */
{
printf("graphics error: %s ", grapherrormsg(errorcode));
printf("press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
midx = getmaxx() / 2;
midy = getmaxy() / 2;
settextjustify(center_text, center_text);
/* loop through the available text styles */
for (style=default_font; style<=gothic_font; style++)
{
cleardevice();
if (style == triplex_font)
size = 4;
/* select the text style */
settextstyle(style, horiz_dir, size);
/* output a message */
outtextxy(midx, midy, fname[style]);
getch();
}
/* clean up */
closegraph();
return 0;
}

源代碼講解:

上面的例子中,控制字體用settextstyle函數,style參數是選擇字體的,關於其它的參數說明可參考聯機幫助。outtextxy函數用來輸出文本。

如果老兄是想顯示各種不同字體的漢字話,那得麻煩點。這裡不想多說,只提供兩種方案

(1) 利用ucdos的漢字特顯技術,用c中的printf函數帶上特殊參數即可,具體可參考有關資料(比如《電腦愛好者》中曾講過)

(2) 在圖形模式下,調用字體文件,用c函數putpixel輸出。推薦參考書

[1]《c語言最新編程技巧200例》(修訂本)魯沐浴主編 電子工業出版社 1997

二.c中的顏色問題

顏色問題不是一兩句話能將清楚的,建議你了解一點計算機是如何處理顏色的。下面的回答主要以tc3.0中的例子為主。

顏色可分為前景色(即字體顏色)和背景顏色。在c中顏色的設置分為文本模式下的設置和圖形模式下的設置。下面先將在文本模式下的設置

1.文本模式下的設置

先看文本模式下的色彩設定

7 6 5 4 3 2 1 0

(b b b b f f f f)

上面是一個字節(共有8位),0——3位設定前景色,4——6為設定背景色。第7為控制字符是否閃爍。請看下例

例二.

#include
int main(void)
{
int i, j;
clrscr();
for (i=0; i<9; i++)
{
textcolor(i+1);
textbackground(i);
for (j=0; j<80; j++) cprintf("c");
cprintf(" ");
}
return 0;
}

原代碼解釋:textcolor函數用來設定字符顏色,由於它只設定字符顏色,因此參數中(一個整數)只有0——3和第7為有效。textbackground函數用來設定背景色,參數中4——6位有效。

要想用一個函數同時設定前景色和背景色以及是否閃爍,可用textattr函數,看下例

例三.

clude
int main(void)
{
int i;
clrscr();
for (i=0; i<9; i++)
{
textattr(i + ((i+1) << 4));
cprintf("this is a test ");
}
return 0;
}

提醒:在文本模式下輸出字符用cprintf函數,不用printf函數。

2.圖形模式下的設置

例四.

#include
#include
#include
#include
int main(void)
{
/* select a driver and mode that supports */
/* multiple drawing colors. */
int gdriver = ega, gmode = egahi, errorcode;
int color, maxcolor, x, y;
char msg[80];
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grok) /* an error occurred */
{
printf("graphics error: %s ", grapherrormsg(errorcode));
printf("press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
/* maximum color index supported */
maxcolor = getmaxcolor();
/* for centering text messages */
settextjustify(center_text, center_text);
x = getmaxx() / 2;
y = getmaxy() / 2;
/* loop through the available colors */
for (color=1; color<=maxcolor; color++)
{
/* clear the screen */
cleardevice();
/* select a new background color */
setcolor(color);
setbkcolor(color+1);
/* output a messsage */
sprintf(msg, "color: %d", color);
outtextxy(x, y, msg);
getch();
}
/* clean up */
closegraph();
return 0;
}

原代碼說明:setcolor設定字體顏色,setbkcolor設定背景色

提醒:輸出字符用outtextxy函數

小結:這裡所敘述的只是一小部分,要學好這方面的內容,准備一本參考手冊(可用聯機幫助),多上機實踐.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved