亚洲AV日韩AⅤ综合手机在线观看,激情婷婷久久综合色,欧美色五月婷婷久久,久久国产精品99久久人人澡

  • <abbr id="uk6uq"><abbr id="uk6uq"></abbr></abbr>
  • <tbody id="uk6uq"></tbody>
  • 文本方式下圖形提示界面制作

    時(shí)間:2024-08-14 05:52:41 計(jì)算機(jī)畢業(yè)論文 我要投稿
    • 相關(guān)推薦

    文本方式下圖形提示界面制作

    在商品化的軟件中,有大量的提示信息界面以使用戶清楚軟件的狀態(tài)和運(yùn)行情況,使用漢字提示可以大大方便不懂西文提示的用戶。但如果少量的漢字提示在圖形方式下實(shí)現(xiàn),將使程序的設(shè)計(jì)復(fù)雜化,而且圖形方式比文本方式的實(shí)現(xiàn)要慢得多。本文使用EGA文本方式下漢字顯示原理,設(shè)計(jì)制做了一個(gè)微機(jī)駐留報(bào)警系統(tǒng)的封面提示信息,提示制做人、版權(quán)、公司徽標(biāo)等信息,實(shí)現(xiàn)了漢字,圖形,字符的彩色提示界面。下面討論實(shí)現(xiàn)的具體方法及原理。
    一、漢字字模數(shù)據(jù)的提取
    文本方式下的漢字顯示是通過(guò)用漢字字模改寫(xiě)西文字符字模的方法實(shí)現(xiàn)的,所以應(yīng)首先獲得漢字字模數(shù)據(jù)。
    各種漢字操作系統(tǒng)可以提供不同大小和字體的漢字字模,本文作為一個(gè)實(shí)例,從金山DOS的cclibj.dot的字庫(kù)中獲得所要顯示的楷體漢字字模的16×16點(diǎn)陣數(shù)據(jù)。
    字庫(kù)的讀取用C語(yǔ)言實(shí)現(xiàn),具體方法如下。
    (1)把需要顯示的漢字作為同字符同樣看待的字符串賦值于一個(gè)內(nèi)存變量f,漢字字符串的值在WPS的N命令下輸入,然后轉(zhuǎn)入C語(yǔ)言進(jìn)行編程。
    (2)在C語(yǔ)言的環(huán)境中漢字字符串的值是國(guó)標(biāo)碼,字模的讀取,就是利用所要顯示的漢字國(guó)標(biāo)碼計(jì)算此漢字在字庫(kù)中對(duì)應(yīng)的字模的位置,然后讀取字庫(kù)中的32字節(jié)的字模數(shù)據(jù)至內(nèi)存緩沖區(qū)buf中。
    C語(yǔ)言中漢字串的國(guó)標(biāo)碼與cclibj.dot字庫(kù)中一條字符記錄具有如下的對(duì)應(yīng)關(guān)系:
    C1,C2是整型數(shù)輔助變量,ihi、ilo表示國(guó)標(biāo)碼的高兩位和低兩位整型數(shù)
    。l為長(zhǎng)整型數(shù),用于字模查找定位。
    C1=(i-a0H)+94
    C2=i-a0H+c1-659
    l=C2*32L
    利用函數(shù):
    lseek(fp, l, seek-set);
    read (fp, buf,32);
    找到字模開(kāi)始位置,并讀入32字節(jié)字模數(shù)據(jù)到內(nèi)存緩沖區(qū)buf中。
    (3)使用輸出函數(shù)的16進(jìn)制輸出格式,把緩沖區(qū)buf的內(nèi)容輸出并記錄下來(lái)。本例中獲得的“天驕”字模數(shù)據(jù)如下:
    天:087ffc 1 010 1014fffe 10 280 280440 4 40820 101020 e o4
    驕:8cfdfo 8 2048 204bfe 48 5048 887e8c4 8 81c 88e48844 88 148898 2 8
    實(shí)現(xiàn)程序見(jiàn)附錄程序1。
    二、圖形字模的設(shè)計(jì)
    由于圖示沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),所以顯示圖形的圖模數(shù)據(jù),用手工設(shè)計(jì)完成。本例中的圖形是公司的徽標(biāo),使用11個(gè)8×16的西文字符點(diǎn)陣表示圖形。11個(gè)西文字符點(diǎn)陣表示的圖模數(shù)據(jù)見(jiàn)程序中的row1-graph, row2-graph, row3-graph, 分別表示圖1中的第一行,第二行和第三行的圖模數(shù)據(jù)。
    @@T5S08500.GIF;圖1@@
    三、字模和圖模數(shù)據(jù)的寫(xiě)入
    1.可修改的字模表
    EGA配有的顯示存儲(chǔ)器分成4個(gè)獨(dú)立區(qū)段,稱為4個(gè)頁(yè)面。在文本方式下頁(yè)面0和頁(yè)面1分放屏幕字符的ASCII碼和屬性字節(jié),而頁(yè)面2則用來(lái)存放字模表。EGA的字模表本來(lái)是存儲(chǔ)在ROM中的,但當(dāng)每次初始化文本方式時(shí),EGA的BIOS會(huì)把字模表拷貝到顯示存儲(chǔ)器的頁(yè)面2中,由于字模表已移到RAM中,用戶程序就能夠?qū)ψ帜_M(jìn)行存取和修改了。
    2.字模表的結(jié)構(gòu)
    EGA的字符寬度固定為8個(gè)像素,字符高度允許從1到32范圍取值,字模表是根據(jù)不間的字符集分塊存儲(chǔ)的,每個(gè)字符集內(nèi)則按字符的ASCII碼值從小到大的順序排列。每個(gè)字符固定占有32B,分別對(duì)應(yīng)字模從上到下的32個(gè)掃描行。但并非所有的掃描行全部使用,視不同的顯示模式使用其中一部分掃描行。
    因此,16×16點(diǎn)陣的漢字字模占用2個(gè)西文字符,而圖形實(shí)現(xiàn)則視情況占用若干個(gè)西文字符。
    3.字模的裝入
    字模和圖模數(shù)據(jù)的寫(xiě)入可通過(guò)BIOS INT 10H子功能11h來(lái)實(shí)現(xiàn)。
    輸入?yún)?shù):AH=11H
    AL=0
    ES: BP=字模數(shù)據(jù)地址
    CX=裝入字符個(gè)數(shù)(1~256)
    DX=起始字符(0~255)
    BL=字符集序號(hào)(0~3)
    BH=字符高度(1~32)
    其中,字模數(shù)據(jù)地址是程序中的字模數(shù)據(jù)區(qū)的首地址。而起始字符是字模數(shù)據(jù)寫(xiě)入顯示緩沖區(qū)開(kāi)始的位置。
    四、漢字及圖形的彩色顯示
    1.西文字符的顯示原理
    輸出文本時(shí),頁(yè)面0存入要輸出字符的ASCII碼值,頁(yè)面1存入字符屬性。由頁(yè)面0的ASCII碼值索引到頁(yè)面2的字符發(fā)生器,再結(jié)合頁(yè)面1的屬性便可在屏幕上顯示相應(yīng)的字符,如圖2所示
    @@T5S08501.GIF;圖2@@
    2.漢字及圖形的顯示
    利用西文字符的顯示原理,使得字模未修改前應(yīng)顯示的西文字符顯示成修改后的漢字字;驁D模,通過(guò)使用被修改過(guò)的數(shù)個(gè)西文字符字模,顯示漢字或圖形。
    3.顯示輸出
    BIOS INT10的子功能13H完成字符的輸出。
    輸入?yún)?shù):AH=13H
    AL=1
    BL=字符屬性
    CX=顯示字符個(gè)數(shù)
    DH=顯示字符的行號(hào)
    DL=顯示字符的列號(hào)
    ES: BP=顯示字符串的首地址
    其中,顯示字符串的開(kāi)始字符由用戶在頁(yè)面0的ASCII碼空間內(nèi)可以任意取值,字符屬性可以
    設(shè)定顯示的顏色。實(shí)現(xiàn)程序見(jiàn)程序2。
    程序1
    #include "stdio.h"
    #include "fcntl.h"
    unsigned char *f="天驕";
    int fp;
    main()
    {
    unsigned int i,c1,c2,t=0;
    int i1,i2,i3;
    long L;
    unsigned char buf[32];
    fp=open("g:\wps\cclibj.dot",O-RDWR|O-BINARY);
    if(fp==-1){cputs("error on open cclib !");
    exit(0);}
    while ((i=*f++)!=0)
    {
    if(i>0xa0)
    if(t==0)
    {
    c1=(i-0xa0)*94;
    t++;}
    else
    {
    c2=i-0xa0+c1-659;
    t=0;
    l=c2*32L;
    lseek(fp,l,SEEK-SET);
    read(fp,buf,32);
    printf("hex code:\n");
    for (i=0;i<32;i++)
    if(i==16){printf("%\n",buf[i]);}
    else printf("%x",buf[i]);
    printf("\n");
    getch();
    };
    }
    }
    程序2
    cseg segment para public'code'
    assume cs:cseg
    org 100h
    main proc near
    start: mov ax, cseg
    mov es,ax
    mov ax,0003h
    int 10h
    mov ax,1100h
    mov bh,16
    mov bl,0
    mov cx,3
    mov dx,130
    lea bp,row1-grahh
    int 10h
    mov cx,4
    mov dx,133
    lea bp,row2-graph
    int 10h
    mov cx,5
    mov dx,137
    lea bp,row3-graph
    int 10h
    mov cx,2
    mov dx,142
    lea bp,tian
    int 10h
    mvo cx,2
    mov dx,144
    lea bp,jiao
    int 10h
    mov ax,1103h
    mov bl,00000000b
    int 10h
    mov ax,1301h
    mov bh,0
    mov bl,01h
    mov dl,2
    mov dh,1
    mov cx,1
    lop: lea bp,hd
    int 10h
    inc dl
    cmp dl,24
    jnz lop
    mov dl,2
    inc dh
    cmp dh,7
    jnz lop
    mov bl,17h
    mov cx,3
    mov dh,2
    mov dl,12
    lea bp,str1
    int 10h
    mov cx,4
    mov dh,3
    mov dl,12
    lea bp,str2
    int 10h
    mov cx,5
    mov dh,4
    mov dl,10
    lea bp,str3
    int 10h
    mov cx,2
    mov dh,3
    mov dl,4
    lea bp,ws1
    int 10h
    mov cx,2
    mov dh,3
    mov dl,20
    lea bp,ws2
    int 10h
    mov ax,0003h
    int 10h
    main endp
    row1-graph db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,
    00h,
    00h,01h
    db 00h,00h,00h,04h,04h,0ch,00h,00h,00h,38h,3eh,71h,00h,00h,00h,0f0h
    db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,0c0h,70h,38h,1ch,0eh
    row2-graph db 01h,03h,00h,00h,00h,07h,0fh,0fh,00h,00h,00h,3fh,7fh,
    7fh,
    00h,00h
    db 0f0h,0f0h,00h,00h,00h,0f0h,0f0h,0e0h,00h,00h,00h,0e0h,0e0h,0c0h,00h,00
    h
    db 0eh,0fh,0fh,07h,07h,03h,03h,03h,07h,07h,0fh,0fh,1fh,1fh,3fh,3fh
    db 00h,00h,00h,00h,80h,80h,80h,80h,0c0h,0c0h,0c0h,0c0h,0c0h,80h,80h,80h
    row3-graph db 00h,00h,00h,00h,00h,00h,00h,01h,01h,03h,00h,00
    h,00h,
    00h,00h,00h
    db 00h,7fh,7fh,0ffh,00h,00h,00h,0ffh,0ffh,0ffh,00h,00h,00h,00h,00h,00h
    db 00h,0ffh,0ffh,0ffh,00h,00h,00h,0ffh,0ffh,0ffh,00h,00h,00h,00h,00h,00h
    db 00h,0c3h,0ffh,09fh,0fh,0fh,07h,83h,81h,01h,00h,00h,00h,00h,00h,00h
    db 0ffh,0ffh,0ffh,0feh,0feh,0fch,0f8h,0f0h,0c0h,00h,00h,00h,00h,00h,00h
    tian db 00h,7fh,01h,01h,01h,01h,0ffh,01h,02h,02h,04h,04h,08
    h,10
    h,20h,0c0h
    db 00h,0fch,00h,00h,00h,04h,0feh,00h,80h,80h,40h,40h,20h,10h,0eh,04h
    jiao db 08h,0fdh,08h,48h,4bh,48h,48h,49h,7eh,04h,1ch,0e4h,4
    4h,1
    4h,09h,02h
    db 0ch,0f0h,20h,20h,0feh,50h,88h,06h,8ch,88h,88h,88h,88h,88h,08h,08h
    str1 db 130,131,132
    str2 db 133,134,135,136
    str3 db 137,138,139,140,141
    ws1 db 142,143
    ws2 db 144,145
    hddb 219
    cseg ends
    end start  

    作者:劉文廣 董春平 

    【文本方式下圖形提示界面制作】相關(guān)文章:

    Linux下的GTK圖形界面編程12-04

    DOS界面下通用圖形編輯軟件的設(shè)計(jì)03-06

    圖形LCD模塊的菜單方式人機(jī)交互界面03-19

    淺談圖形用戶界面的文化傳播影響03-01

    Windows 95的引導(dǎo)圖形界面及抖動(dòng)變色圖像的形成03-03

    概念隱喻視角下的科技文本翻譯03-18

    論特定環(huán)境下戲劇的開(kāi)場(chǎng)方式03-18

    試析文本闡釋視域下的杜詩(shī)“詩(shī)史”之名緣起03-16

    基于多媒體作品制作的教學(xué)方式探索03-18

    嵌入式圖形用戶界面在S3C44B0X上的移植03-18