首頁 > 文章中心 > 正文

      圖形提示界面制作

      前言:本站為你精心整理了圖形提示界面制作范文,希望能為你的創(chuàng)作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

      圖形提示界面制作

      在商品化的軟件中,有大量的提示信息界面以使用戶清楚軟件的狀態(tài)和運行情況,使用漢字提示可以大大方便不懂西文提示的用戶。但如果少量的漢字提示在圖形方式下實現(xiàn),將使程序的設(shè)計復(fù)雜化,而且圖形方式比文本方式的實現(xiàn)要慢得多。本文使用EGA文本方式下漢字顯示原理,設(shè)計制做了一個微機駐留報警系統(tǒng)的封面提示信息,提示制做人、版權(quán)、公司徽標(biāo)等信息,實現(xiàn)了漢字,圖形,字符的彩色提示界面。下面討論實現(xiàn)的具體方法及原理。

      一、漢字字模數(shù)據(jù)的提取

      文本方式下的漢字顯示是通過用漢字字模改寫西文字符字模的方法實現(xiàn)的,所以應(yīng)首先獲得漢字字模數(shù)據(jù)。

      各種漢字操作系統(tǒng)可以提供不同大小和字體的漢字字模,本文作為一個實例,從金山DOS的cclibj.dot的字庫中獲得所要顯示的楷體漢字字模的16×16點陣數(shù)據(jù)。

      字庫的讀取用C語言實現(xiàn),具體方法如下。

      (1)把需要顯示的漢字作為同字符同樣看待的字符串賦值于一個內(nèi)存變量f,漢字字符串的值在WPS的N命令下輸入,然后轉(zhuǎn)入C語言進行編程。

      (2)在C語言的環(huán)境中漢字字符串的值是國標(biāo)碼,字模的讀取,就是利用所要顯示的漢字國標(biāo)碼計算此漢字在字庫中對應(yīng)的字模的位置,然后讀取字庫中的32字節(jié)的字模數(shù)據(jù)至內(nèi)存緩沖區(qū)buf中。

      C語言中漢字串的國標(biāo)碼與cclibj.dot字庫中一條字符記錄具有如下的對應(yīng)關(guān)系:

      C1,C2是整型數(shù)輔助變量,ihi、ilo表示國標(biāo)碼的高兩位和低兩位整型數(shù)

      。l為長整型數(shù),用于字模查找定位。

      C1=(i-a0H)+94

      C2=i-a0H+c1-659

      l=C2*32L

      利用函數(shù):

      lseek(fp,l,seek-set);

      read(fp,buf,32);

      找到字模開始位置,并讀入32字節(jié)字模數(shù)據(jù)到內(nèi)存緩沖區(qū)buf中。

      (3)使用輸出函數(shù)的16進制輸出格式,把緩沖區(qū)buf的內(nèi)容輸出并記錄下來。本例中獲得的“天驕”字模數(shù)據(jù)如下:

      天:087ffc10101014fffe10280280440440820101020eo4

      驕:8cfdfo82048204bfe485048887e8c4881c88e488448814889828

      實現(xiàn)程序見附錄程序1。

      二、圖形字模的設(shè)計

      由于圖示沒有統(tǒng)一的標(biāo)準(zhǔn),所以顯示圖形的圖模數(shù)據(jù),用手工設(shè)計完成。本例中的圖形是公司的徽標(biāo),使用11個8×16的西文字符點陣表示圖形。11個西文字符點陣表示的圖模數(shù)據(jù)見程序中的row1-graph,row2-graph,row3-graph,分別表示圖1中的第一行,第二行和第三行的圖模數(shù)據(jù)。

      @@T5S08500.GIF;圖1@@

      三、字模和圖模數(shù)據(jù)的寫入

      1.可修改的字模表

      EGA配有的顯示存儲器分成4個獨立區(qū)段,稱為4個頁面。在文本方式下頁面0和頁面1分放屏幕字符的ASCII碼和屬性字節(jié),而頁面2則用來存放字模表。EGA的字模表本來是存儲在ROM中的,但當(dāng)每次初始化文本方式時,EGA的BIOS會把字模表拷貝到顯示存儲器的頁面2中,由于字模表已移到RAM中,用戶程序就能夠?qū)ψ帜_M行存取和修改了。

      2.字模表的結(jié)構(gòu)

      EGA的字符寬度固定為8個像素,字符高度允許從1到32范圍取值,字模表是根據(jù)不間的字符集分塊存儲的,每個字符集內(nèi)則按字符的ASCII碼值從小到大的順序排列。每個字符固定占有32B,分別對應(yīng)字模從上到下的32個掃描行。但并非所有的掃描行全部使用,視不同的顯示模式使用其中一部分掃描行。

      因此,16×16點陣的漢字字模占用2個西文字符,而圖形實現(xiàn)則視情況占用若干個西文字符。

      3.字模的裝入

      字模和圖模數(shù)據(jù)的寫入可通過BIOSINT10H子功能11h來實現(xiàn)。

      輸入?yún)?shù):AH=11H

      AL=0

      ES:BP=字模數(shù)據(jù)地址

      CX=裝入字符個數(shù)(1~256)

      DX=起始字符(0~255)

      BL=字符集序號(0~3)

      BH=字符高度(1~32)

      其中,字模數(shù)據(jù)地址是程序中的字模數(shù)據(jù)區(qū)的首地址。而起始字符是字模數(shù)據(jù)寫入顯示緩沖區(qū)開始的位置。

      四、漢字及圖形的彩色顯示

      1.西文字符的顯示原理

      輸出文本時,頁面0存入要輸出字符的ASCII碼值,頁面1存入字符屬性。由頁面0的ASCII碼值索引到頁面2的字符發(fā)生器,再結(jié)合頁面1的屬性便可在屏幕上顯示相應(yīng)的字符,如圖2所示

      @@T5S08501.GIF;圖2@@

      2.漢字及圖形的顯示

      利用西文字符的顯示原理,使得字模未修改前應(yīng)顯示的西文字符顯示成修改后的漢字字模或圖模,通過使用被修改過的數(shù)個西文字符字模,顯示漢字或圖形。

      3.顯示輸出

      BIOSINT10的子功能13H完成字符的輸出。

      輸入?yún)?shù):AH=13H

      AL=1

      BL=字符屬性

      CX=顯示字符個數(shù)

      DH=顯示字符的行號

      DL=顯示字符的列號

      ES:BP=顯示字符串的首地址

      其中,顯示字符串的開始字符由用戶在頁面0的ASCII碼空間內(nèi)可以任意取值,字符屬性可以

      設(shè)定顯示的顏色。實現(xiàn)程序見程序2。

      程序1

      #include"stdio.h"

      #include"fcntl.h"

      unsignedchar*f="天驕";

      intfp;

      main()

      {

      unsignedinti,c1,c2,t=0;

      inti1,i2,i3;

      longL;

      unsignedcharbuf[32];

      fp=open("g:\wps\cclibj.dot",O-RDWR|O-BINARY);

      if(fp==-1){cputs("erroronopencclib!");

      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("hexcode:\n");

      for(i=0;i<32;i++)

      if(i==16){printf("%\n",buf[i]);}

      elseprintf("%x",buf[i]);

      printf("\n");

      getch();

      };

      }

      }

      程序2

      csegsegmentparapublic''''code''''

      assumecs:cseg

      org100h

      mainprocnear

      start:movax,cseg

      moves,ax

      movax,0003h

      int10h

      movax,1100h

      movbh,16

      movbl,0

      movcx,3

      movdx,130

      leabp,row1-grahh

      int10h

      movcx,4

      movdx,133

      leabp,row2-graph

      int10h

      movcx,5

      movdx,137

      leabp,row3-graph

      int10h

      movcx,2

      movdx,142

      leabp,tian

      int10h

      mvocx,2

      movdx,144

      leabp,jiao

      int10h

      movax,1103h

      movbl,00000000b

      int10h

      movax,1301h

      movbh,0

      movbl,01h

      movdl,2

      movdh,1

      movcx,1

      lop:leabp,hd

      int10h

      incdl

      cmpdl,24

      jnzlop

      movdl,2

      incdh

      cmpdh,7

      jnzlop

      movbl,17h

      movcx,3

      movdh,2

      movdl,12

      leabp,str1

      int10h

      movcx,4

      movdh,3

      movdl,12

      leabp,str2

      int10h

      movcx,5

      movdh,4

      movdl,10

      leabp,str3

      int10h

      movcx,2

      movdh,3

      movdl,4

      leabp,ws1

      int10h

      movcx,2

      movdh,3

      movdl,20

      leabp,ws2

      int10h

      movax,0003h

      int10h

      mainendp

      row1-graphdb00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,

      00h,

      00h,01h

      db00h,00h,00h,04h,04h,0ch,00h,00h,00h,38h,3eh,71h,00h,00h,00h,0f0h

      db00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,0c0h,70h,38h,1ch,0eh

      row2-graphdb01h,03h,00h,00h,00h,07h,0fh,0fh,00h,00h,00h,3fh,7fh,

      7fh,

      00h,00h

      db0f0h,0f0h,00h,00h,00h,0f0h,0f0h,0e0h,00h,00h,00h,0e0h,0e0h,0c0h,00h,00

      h

      db0eh,0fh,0fh,07h,07h,03h,03h,03h,07h,07h,0fh,0fh,1fh,1fh,3fh,3fh

      db00h,00h,00h,00h,80h,80h,80h,80h,0c0h,0c0h,0c0h,0c0h,0c0h,80h,80h,80h

      row3-graphdb00h,00h,00h,00h,00h,00h,00h,01h,01h,03h,00h,00

      h,00h,

      00h,00h,00h

      db00h,7fh,7fh,0ffh,00h,00h,00h,0ffh,0ffh,0ffh,00h,00h,00h,00h,00h,00h

      db00h,0ffh,0ffh,0ffh,00h,00h,00h,0ffh,0ffh,0ffh,00h,00h,00h,00h,00h,00h

      db00h,0c3h,0ffh,09fh,0fh,0fh,07h,83h,81h,01h,00h,00h,00h,00h,00h,00h

      db0ffh,0ffh,0ffh,0feh,0feh,0fch,0f8h,0f0h,0c0h,00h,00h,00h,00h,00h,00h

      tiandb00h,7fh,01h,01h,01h,01h,0ffh,01h,02h,02h,04h,04h,08

      h,10

      h,20h,0c0h

      db00h,0fch,00h,00h,00h,04h,0feh,00h,80h,80h,40h,40h,20h,10h,0eh,04h

      jiaodb08h,0fdh,08h,48h,4bh,48h,48h,49h,7eh,04h,1ch,0e4h,4

      4h,1

      4h,09h,02h

      db0ch,0f0h,20h,20h,0feh,50h,88h,06h,8ch,88h,88h,88h,88h,88h,08h,08h

      str1db130,131,132

      str2db133,134,135,136

      str3db137,138,139,140,141

      ws1db142,143

      ws2db144,145

      hddb219

      csegends

      endstart

      亚洲欧美日韩国产精品一区| 亚洲一区二区三区无码中文字幕| 亚洲国产精品无码久久一线| 亚洲国产精品综合久久网络| 国产成人亚洲精品播放器下载 | 亚洲美女免费视频| 亚洲AV福利天堂一区二区三| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 亚洲国产美女精品久久| 亚洲精品国产福利在线观看| 亚洲视频在线观看地址| 精品亚洲成a人片在线观看| 亚洲影院在线观看| 亚洲精品国产成人中文| 亚洲天堂电影在线观看| 亚洲人成77777在线播放网站不卡| 亚洲一区二区三区在线| 亚洲欧洲日韩极速播放| 亚洲熟妇无码一区二区三区导航| 亚洲人成色777777精品| 亚洲av成人中文无码专区| 精品亚洲视频在线| 亚洲国产成人乱码精品女人久久久不卡 | 国产精品亚洲а∨天堂2021| 在线观看亚洲电影| 亚洲人成国产精品无码| 中文字幕人成人乱码亚洲电影| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲国产精品无码成人片久久| 久久精品国产亚洲AV麻豆王友容 | 337p日本欧洲亚洲大胆精品555588| 亚洲欧洲日产国码二区首页 | 亚洲综合精品香蕉久久网| 亚洲精品自在在线观看| 亚洲AV人人澡人人爽人人夜夜| 久久国产精品亚洲综合| 亚洲精品中文字幕无码AV| 亚洲中文字幕无码中文| 亚洲av高清在线观看一区二区| 亚洲国产成人精品女人久久久 | 丰满亚洲大尺度无码无码专线|