版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
會計學1C語言從入門到精通非常不錯
一個有實用價值的C語言應用程序往往較大,需要劃分成不同的模塊,分配給不同的程序員去完成。因此,在實用軟件的開發(fā)中,往往需要采用多模塊編程技術。12.1多模塊編程方法
使用多模塊編程技術的處理過程大致如下:1、首先將一個大的源程序根據其功能合理地劃分成若干個小的源程序,每個小源程序均以程序文件(.C)的形式保存在磁盤上。并建立一個包括各個源程序模塊的文件名的工程文件(.prj)。
12.1.1程序模塊組織下一頁
第12章C語言綜合應用程序舉例上一頁第1頁/共56頁2、然后用編譯器進行編譯,將工程文件中指定的多個源程序文件進行編譯,生成多個目標文件和一個可執(zhí)行文件。注意,在分模塊單獨編譯處理的各個程序模塊中,必須有且只有一個主函數
main()。
下一頁
第12章C語言綜合應用程序舉例上一頁12.1.2模塊之間的通信1、使用外部變量即一個程序文件file1.c中定義一個外部變量,另一個程序文件file2.c中的函數可以通過外部變量說明后來使用這個變量,以實現模塊間的通信。說明形式:extern
類型說明符
外部變量名
;
注意:只是進行了說明,并不是變量定義第2頁/共56頁2、舉例利用外部變量實現程序模塊f1.c與程序模塊f2.c之間的通信。
設程序模塊文件
f1.c的內容如下:
#include<stdio.h>intvar=8;/*全局變量的定義*/
main(){printf(“%d”,var);proc1();printf(“%d\n”,var);}下一頁
第12章C語言綜合應用程序舉例上一頁第3頁/共56頁
程序模塊文件f2.c的內容如下:externintvar;/*外部變量的說明*/proc1(){var=25;}程序編譯連接生成可執(zhí)行文件,執(zhí)行結果為:
825下一頁
第12章C語言綜合應用程序舉例上一頁12.1.3預處理命令#include的應用1、#include命令經過預處理后,會將其后有關文件的內容拷貝到命令所在的源程序文件中。第4頁/共56頁2、在上一個例子中,程序要能夠編譯運行,需建立一個工程文件f12.prj,其內容為:
f1.cf2.c然后對f12.prj文件編譯運行即可。3、也可以在f1.c文件開頭加一預處理命令:#include<stdio.h>#include<f2.c>intvar=8;main(){……}對f1.c文件直接編譯運行即可。
第12章C語言綜合應用程序舉例上一頁返回第5頁/共56頁12.2圖形處理應用
圖形處理是計算機應用的一個極具特色的領域,有很好的應用前景,可以增強程序的趣味性、實用性。12.2.1基本圖形處理庫函數
TurboC支持多種顯示適配器的各種顯示模式,提供了畫點、線、圓、橢圓、多邊形以及輸出各種字體等功能的函數。這些函數包含在圖形頭文件(graphics.h)中,在進行目標程序連接時,也必須將圖形庫文件graphics.lib連接到目標程序中去,其圖形接口還包括圖形顯示驅動程序(*.BGI)等。下一頁
第12章C語言綜合應用程序舉例上一頁第6頁/共56頁作用:將一個圖形驅動程序裝入內存,并將系統(tǒng)設置成圖形模式;說明:gd指定所用的圖形驅動程序,其值可參照書上的圖形驅動程序常量表;
gm說明初始化的圖形模式,其取值見附錄;
path指定驅動程序目錄路徑,空字符時表示驅動程序就在當前目錄下。
例如:若已知所用的圖形適配器為CGA,并打算使用
640×200高分辨率模式CGAHI,則圖形初始化部分可寫成:1、圖形系統(tǒng)初始化函數⑴顯示模式控制函數initgraph(gd,gm,path)intgd=CGA,gm=CGAHI;initgraph(&gd,&gm,“\\TC”);
下一頁
第12章C語言綜合應用程序舉例上一頁第7頁/共56頁⑵自動檢測顯示器硬件的函數detectgraph(gd,gm)
作用:當編程者不知所用的圖形適配器的類型,或者需要編寫在不同圖形模式下均能運行的圖形程序,使用該函數可以完成對適配器的檢查,獲取顯示器類型號(賦給gd)及相應的顯示模式(賦給gm)。例如:圖形初始化部分可以寫成:
intgd,gm;detectgraph(&gd,&dm);/*自動測試硬件*/initgraph(&gd,&gm,“\\TC”);
/*根據測試結果進行圖形初始化*/下一頁
第12章C語言綜合應用程序舉例上一頁第8頁/共56頁⑷恢復顯示方式函數closegraph()
作用:關閉圖形系統(tǒng),返回文本工作方式。⑸恢復工作模式函數restorecrtmode()
設置圖形工作模式函數setgraphmode()
作用:使顯示器工作方式在圖形和文本方式之間來回切換。⑶清屏函數cleardevice()
作用:用于畫圖前進行清除屏幕;
作用范圍為整個屏幕。
下一頁
第12章C語言綜合應用程序舉例上一頁第9頁/共56頁2、基本圖形函數⑴三種最基本的圖形函數:畫點、線、圓函數畫點函數
putpixel(x,y,color);作用:將在坐標x、y指定的位置上畫一點,該點的顏色由color值決定。畫線函數
line(startx,starty,endx,endy);作用:在(startx,starty)和(endx,endy)兩點間畫一直線,顏色為系統(tǒng)當前顏色。畫圓函數
circle(x,y,radius);作用:用當前顏色畫一個圓心在(x,y)處,半徑大小為radius的圓。下一頁
第12章C語言綜合應用程序舉例上一頁第10頁/共56頁⑵畫圓弧、扇形、橢圓函數
畫圓弧函數
arc(x,y,start,end,radius);
作用:用當前顏色,以(x,y)為圓心,(start,end)為起止角,radius為半徑畫圓弧。畫扇形函數
pieslice(x,y,start,end,radius);作用:用當前顏色,以(x,y)為圓心,(start,end)為起止角,radius為半徑畫扇形。畫橢圓函數
ellipse(x,y,start,end,xradius,yradius);作用:用當前畫線顏色,以(x,y)為中心,(start,end)為起止角,(xradius,yradius)為兩軸半徑畫圓。
說明:start、end均以角度為單位。下一頁
第12章C語言綜合應用程序舉例上一頁第11頁/共56頁⑶畫多邊形、矩形和條形圖函數
畫多邊形函數drawpoly(numpoints,points);
作用:用當前顏色畫一個多邊形,多邊形的頂點數為numpoints,而points指向的整形數組連續(xù)存放著各頂點的(x,y)坐標。畫矩形函數rectangle(left,top,right,bottom);作用:用當前顏色,以(left,top)為左上角坐標,以(right,bottom)為右下角坐標畫一個矩形。畫條形圖函數bar(left,top,right,bottom);bar3d(left,top,right,bottom,depth,topflag);作用:用當前顏色,畫一實心條形圖;
depth決定bar3d()產生的三維條形圖的厚度,
topflag決定是否加頂蓋。下一頁
第12章C語言綜合應用程序舉例上一頁第12頁/共56頁3、顏色控制函數
屏幕上顯示出的點、線、面的顏色稱為前景色,而襯托它們的背景顏色稱為背景色。在TurboC中常使用的16個標準色為:下一頁
第12章C語言綜合應用程序舉例上一頁第13頁/共56頁⑴顏色設置函數setcolor(color);作用:用顏色值color設置當前畫圖顏色。⑵圖形填充函數floodfill(x,y,bordercolor);作用:該函數對任意封閉圖形進行填充,其顏色和模式由設定的或缺省的顏色與圖形模式決定。說明:編程時該函數位于畫圖函數之后;參數(x,y)
為封閉圖形中的任意一點,bordercolor是封閉圖形的邊框顏色。⑶填充模式函數setfillstyle(pattern,color);作用:來設定floodfill()函數的填充模式。說明:參數pattern的值及其符號如下表所示。
下一頁
第12章C語言綜合應用程序舉例上一頁第14頁/共56頁下一頁
第12章C語言綜合應用程序舉例上一頁舉例:利用基本作圖函數及顏色控制函數畫圖。點擊第15頁/共56頁4、圖形模式下字符輸出函數⑴字符輸出函數outtext(str);作用:在當前位置輸出由str指定的字符串。說明:它能用不同的字型、大小,和不同的顯示方向輸出文字。下一頁
第12章C語言綜合應用程序舉例上一頁⑵字符輸出屬性函數
settextstyle(font,direction,charsize);作用:改變輸出字符串的字型、大小和方向。說明:參數font確定所用的字型;
direction的值表示字符的顯示方向。它可以是HORIZ-DIR(水平輸出,值為0),或是
VERT-DIR(垂直輸出,值為1)。
charsize是增加字符大小的倍數(0~10)。第16頁/共56頁下一頁
第12章C語言綜合應用程序舉例上一頁⑶字符輸出定位函數outtextxy(x,y,str);作用:將str指向的字符串輸出到窗口位置(x,y)上。第17頁/共56頁5、視口操作函數
TurboC所有圖形函數實際上都是在視口(即窗口)上操作的(在沒有定義視口的情況下,它是整個屏幕)。用戶可以同時建立多個不同大小的視口,每個視口操作函數的參數都是以其左上角(坐標為0,0)為參考點的相對坐標。
⑴設置視口函數setviewport(x1,y1,x2,y2,clipflag);
作用:設置左上角坐標為(x1,y1),右下角坐標為(x2,y2)的視口。說明:clipflag決定是否顯示超出視口的圖形部分。0—顯示;1—不顯示。下一頁
第12章C語言綜合應用程序舉例上一頁第18頁/共56頁⑵視口清除函數clearviewport();作用:清除視口內的圖形。
注意:使用setviewport()函數可以在屏幕上開辟多個視口,這些視口可以重迭,但最近一次設置的視口才是當前視口。各圖形函數都是在當前視口中操作。其它視口中的內容只要不被清除,就可以保持在屏幕上。通過改變坐標位置移動視口,從而實現一個立方體的連續(xù)往左移動。程序請下一頁
第12章C語言綜合應用程序舉例上一頁點擊例如第19頁/共56頁6、建立獨立運行的圖形處理程序
要脫離
TurboC集成環(huán)境,建立可獨立運行的可執(zhí)行圖形程序,必須將圖形驅動程序(有的還要將字體驅動程序)連接到可執(zhí)行的圖形程序中。
⑴在\tc子目錄下輸入命令:
C:\TC>BGIOBJEGAVGA↙
作用:將驅動程序EGAVGA.BGI轉換成相應的目標文件EGAVGA.OBJ。⑵在\tc子目錄下輸入命令:
C:\TC>TLIBLIB\graphics.lib+EGAVGA·OBJ↙
作用:將目標文件EGAVGA·OBJ添加到
graphics.lib庫文件中。下一頁
第12章C語言綜合應用程序舉例上一頁第20頁/共56頁⑶在用戶程序調用initgraph()函數之前應加一語句:
registerbgidriver(EGAVGA-driver);字體驅動程序的連接類似。經過上述處理,經編譯連接后的執(zhí)行程序便可在任何目錄或其它兼容機上運行了。
12.2.2圖形處理庫函數應用示例
第12章C語言綜合應用程序舉例上一頁舉例:設有一組實驗數據存于數組val中,將它們用曲線表示在
x-y坐標平面上。程序請點擊返回第21頁/共56頁12.3操作系統(tǒng)接口應用1、DOS基本組成
由引導程序模塊、基本輸入輸出系統(tǒng)、文件管理和系統(tǒng)調用模塊、命令處理模塊等幾個部分組成。
C語言可以通過庫函數實現與操作系統(tǒng)接口,即調用操作系統(tǒng)中的子程序,從而實現用戶應用程序的深層次的開發(fā)。12.3.1DOS操作系統(tǒng)簡介
下一頁
第12章C語言綜合應用程序舉例上一頁DOS為用戶引用其功能子程序,利用了系統(tǒng)的軟件中斷。通過CPU的軟中斷指令INTn調用相應的程序。指令中的n是中斷調用號(也稱中斷類型號),中斷調用號不同,則調用的程序就不同。2、操作系統(tǒng)接口第22頁/共56頁通過軟件中斷調用
BIOS中的基本I/O服務子程序,這種方法常被稱為低層接口。常用的有:利用
INT10指令調用有關顯示器服務程序;利用
INT16H指令調用鍵盤服務程序。下一頁
第12章C語言綜合應用程序舉例上一頁例:設置顯示器顯示模式為320*200彩色圖形模式的匯編語言程序段如下:MOV AL,4;
設顯示模式MOV AH,0;
設功能號INT 10H ;系統(tǒng)功能調用第23頁/共56頁通過軟件中斷調用IBMDOS模塊中的功能程序,即所謂系統(tǒng)功能調用,是高層接口。如INT21H指令便是典型的軟件接口,該接口包括了許多子功能。
例
:向顯示器輸出字符“A”的匯編語言程序段如下:MOV DL,“A”
;
置顯示字符MOV AH,2;
設功能號
INT21H ;系統(tǒng)功能調用
使用這兩種接口,用戶就可以在不與極復雜的硬件接口打交道的情況下,使用系統(tǒng)資源,開發(fā)各種應用軟件。C語言作為一種中級語言,它的一些庫函數實際上就是調用了一些系統(tǒng)功能調用子程序,用戶可以利用它們來調用BIOS及DOS軟件接口,以實現特定功能。下一頁
第12章C語言綜合應用程序舉例上一頁第24頁/共56頁12.3.2操作系統(tǒng)接口庫函數
1、通用軟中斷調用庫函數int86()int86(intintno,unionREGS*inregs,unionREGS*outregs);說明:參數intno表示調用類型號,相當于中斷指令intn調用的中斷類型號n;參數inregs用于接收調用功能號及相關的一些入口參數;參數outregs用于接收調用后的返回值,即出口參數。下一頁
第12章C語言綜合應用程序舉例上一頁舉例:在屏幕的35行、20列處顯示字符串“COMPUTER”。程序請點擊第25頁/共56頁2、系統(tǒng)功能調用庫函數
intdos()和intdosx()
intdos(unionREGS*inregs,unionREGS*outregs);intdosx(unionREGS*inregs,unionREGS*outregs,structREGS*segregs);說明:與DOS的系統(tǒng)功能調用(INT21H)相對應。參數inregs是入口參數,表示相應的功能號;參數
outregs是出口參數,保存調用后的返回值;參數
segregs是一個結構SREGS類型的指針,用來設置和保存CPU段寄存器的值。3、發(fā)送DOS命令庫函數
system()
system(char*cmd);說明:cmd為DOS系統(tǒng)下的命令字符串。下一頁
第12章C語言綜合應用程序舉例上一頁第26頁/共56頁12.3.3鼠標器及其應用
安裝好鼠標器驅動程序,并進行初始化后,然后在應用程序中利用
INT33H功能調用管理鼠標器的各種操作。
例1:編寫一個C語言函數,完成鼠標器初始化工作,測試鼠標安裝情況,顯示檢查結果。
#include<dos.h>unionREGSregs;
intMsinit(){intrecored;
regs.x.ax=0;
/*0#功能,初始化鼠標*/int86(0x33,®s,®s);
/*調BIOS子程序*/recored=regs.x.ax;
/*調用結果返回在AX寄存器中*/下一頁
第12章C語言綜合應用程序舉例上一頁第27頁/共56頁
if(recored==0){printf(“MousenotfoundorMousedrivernotinstalled.\n“);
return0;}/*初始化不成功*/elsereturnrecored;
/*初始化成功*/}例2:編寫讀取鼠標狀態(tài)和鼠標位置的函數。
voidMsget(int*px,int*py,int*pbuttons){regs.x.ax=3;
/*調用3號功能測試鼠標器*/int86(0x33,®s,®s);*px=regs.x.cx;
/*返回鼠標位置*/*py=regs.x.dx;
/*返回鼠標位置*/*buttons=regs.x.bx;
/*返回鼠標狀態(tài)*/}
第12章C語言綜合應用程序舉例上一頁返回第28頁/共56頁12.4C語言與匯編語言混合編程
由C語言程序直接調用匯編語言程序的方法有兩種:在程序中嵌入匯編代碼或直接調用匯編語言子程序。12.4.1匯編語言子程序的一般格式
.MODEL內存模式.DATA……;定義數據.CODEPUBLIC_子程序名;說明在C中調用的子程序名_子程序名
PROC過程類型
……;子程序體RET_子程序名
ENDP;子程序定義結束
END;程序結束下一頁
第12章C語言綜合應用程序舉例上一頁第29頁/共56頁說明:1、匯編子程序和C語言的內存模式應一致;2、過程類型有FAR和NEAR兩種,表示調用程序和被調用程序是否在同一個段內;
3、C語言對應的匯編語言中,函數名和變量名前多加了一個下劃線(_),因此在匯編語言中,子程序名前應有下劃線。匯編語言子程序示例
.modelsmall
.datatimedb10;10毫秒.codepublic_delay;延遲10ms_delayprocmovbl,timedelay:movcx,2801wait:loopwaitdecbljnzdelayret_delayendpend下一頁
第12章C語言綜合應用程序舉例上一頁第30頁/共56頁12.4.2全局變量的傳遞
C語言程序(extern)和匯編語言程序(public)可以通過全局變量傳遞信息,其數據類型的對應關系如下表所示。
由于C語言大小寫是有區(qū)別的,從而在與匯編語言混合編程時,最好在options菜單下的Linker子項中將Case-SensitiveLink置成off狀態(tài)來取消其區(qū)別。
下一頁
第12章C語言綜合應用程序舉例上一頁第31頁/共56頁12.4.3參數和返回值的傳遞C語言程序和匯編語言程序的參數傳遞是通過堆棧來完成的。所謂堆棧,實質就是一種先進后出的內存區(qū)域,且只在一端進行出棧和入棧操作。對C語言而言,參數進棧的順序是從右到左。如在C語言程序中有語句power2(intpara1,intpara2),則執(zhí)行該語句時堆棧中的內容如下圖所示,通過sp便可得到參數值,從而完成參數的數據傳遞。下一頁
第12章C語言綜合應用程序舉例上一頁第32頁/共56頁舉例:設某C語言程序如下:
#include“stdio.h”
intpower2(int,int);
main()
{printf(“2的4次方乘以8為:%d”,power2(8,4));}}
當匯編語言子程序有返回值時,是通過ax和dx寄存器來進行傳遞的。
下一頁
第12章C語言綜合應用程序舉例上一頁第33頁/共56頁匯編語言子程序如下:
.modelsmall
.code
public_power2
_power2proc
pushbpmovbp,spmovax,[bp+4];將第一個參數的值8送到ax中
movcx,[bp+6];將第二個參數的值4送到cx中
shlax,cl;將ax的內容左移cl次,每移一次表示乘2popbpret
_power2endpend下一頁
第12章C語言綜合應用程序舉例上一頁第34頁/共56頁12.4.4匯編語言子程序的匯編及與C程序的連接
1、在集成環(huán)境下,進行混合編程的程序編譯連接時,需要先用宏匯編(MASM.EXE)將匯編語言程序進行匯編,生成OBJ文件。然后,將此OBJ文件加入到C程序中。最后進行連接,生成EXE文件。
2、將OBJ文件加入到C程序,對TurboC而言,非常簡單。先編輯一個工程文件(*.prj),其內容是需要連接的匯編OBJ文件和C語言文件名列表,如:
myc.cmymasm.obj3、然后在TurboC的集成環(huán)境中選擇
project主菜單中的
projectname項,將上面編輯的工程文件名寫入,便可進行連接。
下一頁
第12章C語言綜合應用程序舉例上一頁第35頁/共56頁12.4.5內嵌匯編指令的C程序結構在C程序嵌入匯編指令的格式為:
asm<操作碼><操作數><;或換行>
例如:intmax(inta,intb){asmmovax,aasmcmpax,basmjgokasmmovax,b
ok:return_ax;/*_ax為TurboC定義的偽寄存器變量名*/}下一頁
第12章C語言綜合應用程序舉例上一頁第36頁/共56頁⑴在匯編語言代碼中使用的C語言變量應該初始化且用ptr指明對應的匯編語言類型;⑵偽指令如
db等不能嵌入;⑶在_asm塊中的注釋為匯編語言的注釋,即分號;⑷不應在
_asm塊中用
ret指令返回,而應用C語言的return返回;⑸匯編語言指令不需以分號(;)作語句結束;⑹也可用“_asm<操作碼><操作數><;或換行>”的形式加一行匯編語言指令。下一頁
第12章C語言綜合應用程序舉例上一頁說明第37頁/共56頁
#include"iostream.h"intasmmax(inta,intb){intmaxn=0;/*初始化maxn*/_asm {movax,wordptra;將a的值賦給ax寄存器
movdx,wordptrb;將b的值賦給dx寄存器
cmpax,dx;比較ax和dx的大小
jgok;ax比dx大則轉標號ok處
movax,dx};將dx的值賦給axok:
_asmmovwordptrmaxn,ax;將ax的值賦給maxnreturnmaxn;}main(){printf(“%d”,asmmax(10,50));return0;
}下一頁
第12章C語言綜合應用程序舉例上一頁例如第38頁/共56頁12.4.6內嵌匯編指令的C程序的編譯和連接
對于TurboC而言,內嵌匯編指令的C程序要用TCC命令行來實現編譯連接,其形式是:
TCC<命令行選項><文件名>“命令行選項”中與內嵌匯編指令程序有關的選項參考書本。例如:
TCC–Ic:\tc\include–Lc:\tc\lib–B–mlP1P2.asmmylib.lib它表示:在c:\tc\include目錄中找包含文件(-I);在c:\tc\lib目錄中找?guī)煳募ylib.lib(-L);用大模式(-ml)編譯文件P1.c,調用TASM對
P2.asm進行編譯,連接生成可執(zhí)行文件P1.exe。
第12章C語言綜合應用程序舉例上一頁返回第39頁/共56頁12.5綜合應用程序示例--漢字顯示技術
12.5.1漢字顯示的基本原理
1、國標漢字字符集與區(qū)位碼
區(qū)位碼:每個漢字在漢字庫中有確定的區(qū)號和位號。區(qū)號在前,位號在后,合成一個4位的十進制數字,這就是所謂的區(qū)位碼,用兩個字節(jié)存放,第一個字節(jié)表示區(qū)號,第二個字節(jié)表示位號。只要知道了區(qū)位碼,就可知道該漢字在字庫中的地址。
下一頁
第12章C語言綜合應用程序舉例上一頁第40頁/共56頁
每個漢字在字庫中以點陣字模形式存儲,點陣有16x16、24x24及32x32等多種。16x16點陣字庫中,每個點陣字模用32個字節(jié)來描述,其中的每個點使用一個二進制位。當需要顯示時,把某個漢字的16x16點陣信息直接送到顯示器上,值為1的點可以在屏上顯示一個亮點;值為0的點則不亮,這樣就可顯現出相應的漢字。國標碼:與區(qū)位碼之間存在著一種簡單的換算關系:國標碼的區(qū)號
=區(qū)位碼的區(qū)號+32(或20H)國標碼的位號
=區(qū)位碼的位號+32(或20H)例如,“計”字的區(qū)位碼為2838(或1C26H),其國標碼為6070(或3C46H)。下一頁
第12章C語言綜合應用程序舉例上一頁第41頁/共56頁下一頁
第12章C語言綜合應用程序舉例上一頁第42頁/共56頁2、漢字內碼
漢字內碼是漢字信息處理系統(tǒng)內部標示漢字的編碼,也稱機內碼。它與國標碼也存在一種簡單的對應關系:機內碼區(qū)號=國標碼的區(qū)號+128(或80H)機內碼位號=國標碼的位號+128(或80H)例如,“啊”字的區(qū)位碼為1602(1002H),國標碼為3022H,機內碼為B0A2H。下一頁
第12章C語言綜合應用程序舉例上一頁第43頁/共56頁
在西文狀態(tài)下,對使用漢字的C語言程序采用如下方法:讀出漢字的內碼,將其轉換成字庫的區(qū)位碼,然后直接到字庫中去找出漢字字模。再用有關的位操作和循環(huán)語句,對字模各個字節(jié)的每一位進行判斷。如果某位是1,則按設置的顏色在屏幕的相應位置畫點,若該位為0則不畫點。這樣就可按預先設置的顏色在相應的位置顯示出該漢字來。下一頁
第12章C語言綜合應用程序舉例上一頁第44頁/共56頁3、區(qū)位碼與內碼的轉化關系及字模顯示技術
漢字內碼與區(qū)位碼存在著固定的轉換關系:設某漢字內碼的十六進制數表示形式為0xkkjj,則相應區(qū)位碼的區(qū)號qh和位號wh分別為:qh=0xkk-0xa0;wh=0xjj-0xa0;下一頁
第12章C語言綜合應用程序舉例上一頁若用十進制數表示內碼為c1c2,則
qh=c1-160;
wh=c2-160;即區(qū)位碼qw為:
qw=100*(c1-160)+(c2-160);反之亦可由區(qū)位碼qw求得區(qū)號和位號:
qh=qw/100; wh=qw-100*qh;第45頁/共56頁
對于國標2312-80漢字字庫,漢字庫分成94個區(qū),每個區(qū)有94個位,每個位存放一個漢字,當漢字點陣為16×16時,每個漢字的字模大小為(16×16)/8=32個字節(jié)。因而該漢字在漢字庫中離起點的偏移位置(以字節(jié)為單位),可由如下表達式計算:
offset=(94*(qh-1)+(wh-1))*32L;下一頁
第12章C語言綜合應用程序舉例上一頁第46頁/共56頁
注意,偏移量對于不同的漢字庫是不相同的。下面給出幾種常用漢字庫中地址碼offset的計算公式:⑴ucdos中的字庫CCLIB.DAT存放16x16點陣字模:
offset=((qh-1)*94+(wh-1))*32L;⑵CCDOS2.13中的字庫HZK16存放16x16點陣字模:
offset=((qh-16)*94+wh-1+15*94)*32L;⑶SPDOS5.0的簡體字庫CCLIB.DAT存放16x16點陣字模:
offset=((qh-7)*94+wh-1)*32L;⑷CCDOS2.13中的字庫hzk24存放24x24點陣字模:
offset=((qh-16)*94+wh-1)*72L;下一頁
第12章C語言綜合應用程序舉例上一頁第47頁/共56頁12.5.2西文DOS環(huán)境下的漢字顯示
1、漢字顯示方法在西文DOS環(huán)境下,可以采用畫點或畫線的方法。⑴利用畫點函數putpixel()顯示漢字根據漢字字模點陣信息的各個字節(jié)每位的狀態(tài)來判斷是否在相應的位置上畫點。若該位為1,則在相應的位置上用函數putpixel()畫一點;若是0則跳過。這樣形成的亮點組合起來就是一個漢字的字形。下一頁
第12章C語言綜合應用程序舉例上一頁第48頁/共56頁下一頁
第12章C語言綜合應用程序舉例上一頁
⑵利用畫線函數lineto()顯示漢字根據漢字字模點陣信息可以確定組成漢字16線每條線的線型參數,用setlinestyle()設置線型,再由lineto()函數畫16點長的線,重復16次這樣的過程,畫16條不同的線型的直線,就可組成一個漢字。第49頁/共56頁設置線型函數setlinestyle(linestyle,upattern,thickness);
說明:參數linestyle
用于指定畫線的線型;參數upattern
僅當線型參數為USERBIT_LINE時才起作用??捎?6位二進制、4位16進制或十進制數來表示。表示成16位二進制數時,每位代表一個象素點。若某位是1,則線中的對應像素用當前顏色畫出來;否則對應的象素點用背景色顯示;參數thickness用于指定畫線的寬度。下一頁
第12章C語言綜合應用程序舉例上一頁第50頁/共56頁
漢字的垂直輸出是指將漢字逆時針方向旋轉90度,然后進行輸出顯示。即將按行輸出漢字字模改為按列輸出就可以實現。放大漢字的方法是將字模數據中的每一位用一個填充長方形
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年銅陵普濟圩現代農業(yè)集團有限公司公開招聘工作人員參考筆試題庫附答案解析
- 中國金融出版社有限公司2026校園招聘4人參考考試題庫及答案解析
- 2026年杭州市臨安區(qū)衛(wèi)健系統(tǒng)招聘高層次、緊缺專業(yè)技術人才7人參考考試試題及答案解析
- 2025年福建莆田市國睿產業(yè)園區(qū)運營管理有限公司企業(yè)員工招聘8人備考考試試題及答案解析
- 2025年嘉興市經英人才發(fā)展服務有限公司城南分公司招錄法律專業(yè)人才及法律輔助人員16人參考考試題庫及答案解析
- 2026陜西渭南澄城縣征集見習崗位和招募就業(yè)見習人員備考考試試題及答案解析
- 深度解析(2026)《GBT 25909.2-2010信息技術 維吾爾文、哈薩克文、柯爾克孜文編碼字符集 24點陣字型 第2部分正文黑體》
- 2025年德州臨邑縣人民醫(yī)院公開招聘備案制工作人員(15名)備考考試試題及答案解析
- 深度解析(2026)《GBT 25701-2010復擺顎式破碎機 金屬單耗》(2026年)深度解析
- 深度解析(2026)《GBT 25616-2010土方機械 輔助起動裝置的電連接件》(2026年)深度解析
- GB/T 45481-2025硅橡膠混煉膠醫(yī)療導管用
- GB/T 32468-2025銅鋁復合板帶箔
- 山西交控集團招聘筆試內容
- 大窯校本教材合唱的魅力
- 2025字節(jié)跳動智能廣告發(fā)布服務合同(模板)
- 《建筑測繪》課件
- 《健康體檢報告解讀》課件
- 前臺電話禮儀培訓
- T-CET 402-2024 金屬結構曲面屋頂晶硅組件建筑光伏一體化技術規(guī)范
- 智慧健康養(yǎng)老管理基礎知識單選題100道及答案解析
- 車床設備大修計劃方案
評論
0/150
提交評論