C语言文本屏幕界面设计方法
在做论文,使用C语言文本屏幕界面设计,但是用的不好,希望大家能提供一些例程,谢谢<P> regs.h.ah = 0x03;<BR> regs.h.bh = 0x00;<BR> int86(0x10,&regs,&regs);<BR> xSave = regs.h.dh;<BR> ySave = regs.h.dl;<BR> regs.h.ah = 0x02;<BR> regs.h.bh = 0x00;<BR> regs.h.dh = 0x50;<BR> regs.h.dl = 0x50;<BR> int86(0x10,&regs,&regs);<BR>}</P>
<P>//恢复光标<BR>void CursorRestore(void)<BR>{<BR> union REGS regs;</P>
<P> regs.h.ah = 0x02;<BR> regs.h.bh = 0x00;<BR> regs.h.dh = xSave;<BR> regs.h.dl = ySave;<BR> int86(0x10,&regs,&regs);<BR>}</P>
<P>//窗口区域上滚,背景颜色=attr<BR>void WindowScrollUp(char x1,char y1,char x2,char y2,char attr)<BR>{<BR> union REGS regs;</P>
<P> regs.h.ah = 0x06;<BR> regs.h.al = 0x01;<BR> regs.h.bh = attr;<BR> regs.h.cl = y1;<BR> regs.h.ch = x1;<BR> regs.h.dl = y2;<BR> regs.h.dh = x2;<BR> int86(0x10,&regs,&regs);<BR>}</P>
<P>//在(x,y)写字符,颜色=attr<BR>void WriteChar(unsigned char x,unsigned char y,unsigned char c,unsigned char attr)<BR>{<BR> char far *v = (char far *)0xb8000000;<BR> char far *t;</P>
<P> t = v + x*0xA0+y*0x02;<BR> *t++ = c;<BR> *t++ = attr;<BR>}</P>
<P>//在(x,y)写字符串,颜色=attr<BR>void WriteString(const unsigned char x,const unsigned char y,char *String,const unsigned char attr)<BR>{<BR> unsigned char j = y;<BR> char *ptr = String;</P>
<P> while (*ptr)<BR> WriteChar(x,j++,*ptr++,attr);<BR>}<BR><BR>//读(x,y)处的字符及颜色<BR>unsigned int ReadCharAttr(const unsigned char x , const unsigned char y)<BR>{<BR> unsigned char lo,hi;</P>
<P> char far *v = (char far *)0xb8000000;<BR> char far *t;</P>
<P> t = v + x*0xA0+y*0x02;<BR> lo = *t++; // char<BR> hi = *t++; // attr<BR> return int(hi*256+lo);<BR>}<BR><BR>//保存窗口区域内容<BR>void WindowSaveImage(void)<BR>{<BR> unsigned char far *image_ptr = image;<BR> unsigned int num;</P>
<P> for (char i = 0x00 ; i <= 0x18; i++)<BR> for (char j = 0x00 ; j <= 0x4F; j++)<BR> {<BR> num = ReadCharAttr(i,j);<BR> *image_ptr++ = num%256;<BR> *image_ptr++ = num/256;<BR> }<BR>}</P>
<P>//恢复窗口区域内容<BR>void WindowRestoreImage(void)<BR>{<BR> unsigned char far *image_ptr = image;</P>
<P> for (char i = 0x00; i <= 0x18; i++)<BR> for (char j = 0x00 ; j <= 0x4F ; j++)<BR> {<BR> unsigned char c = *image_ptr++;<BR> unsigned char attr = *image_ptr++;<BR> WriteChar(i,j,c,attr);<BR> }<BR>}</P>
<P>//画窗口<BR>void WindowBorder(const char x1,const char y1,const char x2,const char y2,unsigned char box_attr)<BR>{<BR> for (char i=y1; i<y2; i++)<BR> {<BR> WriteChar(x1,i,DOUBLE_X,box_attr);<BR> WriteChar(x2,i,DOUBLE_X,box_attr);<BR> }<BR> for (i=x1; i<x2; i++)<BR> {<BR> WriteChar(i,y1,DOUBLE_Y,box_attr);<BR> WriteChar(i,y2,DOUBLE_Y,box_attr);<BR> }<BR> WriteChar(x1,y1,DOUBLE_LEFT_UP,box_attr);<BR> WriteChar(x1,y2,DOUBLE_LEFT_DOWN,box_attr);<BR> WriteChar(x2,y1,DOUBLE_RIGHT_UP,box_attr);<BR> WriteChar(x2,y2,DOUBLE_RIGHT_DOWN,box_attr);<BR>}</P>
<P>//窗口初始化<BR>void WindowInit(const int x1,const int y1,const int x2,const int y2,unsigned char box_attr,unsigned char window_attr,unsigned char title_attr,char *title)<BR>{<BR> char i,j;</P>
<P> for (i=x1; i<x2; i++)<BR> for (j=y1; j<y2; j++)<BR> WriteChar(i,j,WINDOW_CHAR,window_attr);<BR> for (i = x1+1;i<=x2+1;i++)<BR> WriteChar(i,y2+1,WINDOW_CHAR,SHADOW_ATTR);<BR> for (j=y1+2; j<=y2+1; j++)<BR> WriteChar(x2+1,j,WINDOW_CHAR,SHADOW_ATTR);<BR> for (i=x1+1; i<=x2+1; i++)<BR> WriteChar(i,y2+1,WINDOW_CHAR,SHADOW_ATTR);<BR> for (j=y1+2; j<=y2+1; j++)<BR> WriteChar(x2+1,j,WINDOW_CHAR,SHADOW_ATTR);<BR> WindowBorder(x1,y1,x2,y2,box_attr);<BR> WriteString(x1,y1+(y2-y1+1-strlen(title))/2,title,title_attr);<BR>}</P>
<P>//桌面初始化<BR>void DeskTopInit(char *title)<BR>{<BR> for (unsigned char i = 0x00 ; i <= 0x4F;i++)<BR> {<BR> WriteChar(0x00,i,WINDOW_CHAR,WHITE_BLACK);<BR> WriteChar(0x18,i,WINDOW_CHAR,WHITE_BLACK);<BR> }<BR> for (i = MIN_DESKTOP_X; i<=MAX_DESKTOP_X; i++)<BR> for (unsigned char j = MIN_DESKTOP_Y; j<=MAX_DESKTOP_Y; j++)<BR> WriteChar(i,j,DESKTOP_CHAR,DESKTOP_ATTR);<BR> WriteString(0x00,(80-strlen(title))/2,title,WHITE_BLACK);<BR>}<BR></P> unsigned char image[(25*80+1)*2];<BR>
页:
[1]
