很象用TURBO VISION写的界面。
/* DATE:05/2000 TOPIC:文本菜单 pass by:turboc 20
*/
# include <graphics.h> # include <alloc.h> # include <process.h> # include <stdio.h> # include <stdlib.h> # include <time.h> # include <string.h> # include <dos.h> # include <bios.h> # include <conio.h> # include <ctype.h>
# define SCREENMINX 0 # define SCREENMINY 0 # define SCREENMAXX 79 # define SCREENMAXY 24
#define WindowMaxX 79 #define WindowMinX 0 #define WindowMaxY 24 #define WindowMinY 0
/* #define BLINK 0x80 */ #define LIGHT 0x08 #define WHITE 0x07 #define BLACK 0x00 #define RED 0x04 #define GREEN 0x02 #define BLUE 0x01
#define MIXCOLOR(A,B) A|B #define LIGHTSHOW(A) A|LIGHT #define DARKSHOW(A) A&0xf7 #define BLINKSHOW(A) A|BLINK #define NOTBLINKSHOW(A) A&0x7f #define BACKCOLOR(A) A<<4 #define MIX(A,B) (A | BACKCOLOR(B)) #define GetBackColor(A) ((A&0x70)>>4) #define GetForeColor(A) A&0x0f #define EnabledSelectMenuItem MIX(BLACK,WHITE) #define EnabledMenuItem MIX(BLACK,GREEN) #define DisabledSelectMenuItem MIX(LIGHSHOW(BLACK),BLACK) #define DisabledMenuItem MIX(LIGHSHOW(BLACK),WHITE)
# define INSERT 0x5200 # define ESC 0x001b # define TAB 0x0f09 # define RETURN 0x000d # define RIGHT 0x4d00 # define LEFT 0x4b00 # define UP 0x4800 # define DOWN 0x5000 # define BS 0x0e08 # define HOME 0x4700 # define END 0x4f00 # define PGUP 0x4900 # define PGDN 0x5100 # define DEL 0x5300 # define F1 0x3b00 # define F2 0x3c00 # define F3 0x3d00 # define F4 0x3e00 # define F5 0x3f00 # define F6 0x4000 # define F7 0x4100 # define F8 0x4200 # define F9 0x4300 # define F10 0x4400
# define MenuInGround 1 # define MenuActiveGround 2 # define MenuActiveItem 3 # define MenuInItem 4 # define MenuEdge 5 # define WindowEdge 6 # define WindowGround 7 # define PopWindow 8
/* unsigned char AllColors[20] = { 0 ,CYAN , LIGHTRED , YELLOW , BLACK , WHITE , LIGHTRED,BLUE, CYAN ,9 ,10,11 ,12 ,13 ,14,15} ; */
typedef unsigned char UCHAR; typedef unsigned int UINT; typedef unsigned long ULONG;
char edge[7]={0xda,0xc4,0xbf,0xb3,0xd9,0xc0,'\0'};
/* char edge1[7]={}; */
#define INUM 10 /* R maximum IO itenls in each MENU w */
typedef struct _menu { char coor[4]; /* The menu's area w */ char itemcoor[4 * INUM]; /* max IO item, each with xl,yl ,x2,y2 w */ char itemdispxy[2 * INUM] ; /* Actually disp item name's X coor w */ char select; /* selected item's ord # */ char itemnum; /* The number of items in this menu w */ char **itemname; /* w item's name(point to static data) R */ int COMMAND_ID[INUM]; /* w Key number R */ }MENUTYPE ;
static char * MainMenuItem[]= {" File "," Edit "," Run "," Compile "," Help ", " Exit ", 0 }; static char *Syshelp=" F1-Help F5-Zoom F6-Switch F7-Trace F8-Step F9-Make F10-Menu";
static char * SubMenuItem1[]= {" Load File... F3 ", " Pick File Alt+F3 ", " New ", " Save F2 ", " Write to ", " Os Shell ", " Quit Alt+X ",0}; /* static char *SubMenuItem[6][]={{"Help11..."}, { */ static char * SubMenuItem2[]= {" Item21...", " Draw ", " Item23 ", " Item24 ", " Item25 ", " Item26 ", " Item27 ", " Item28 ",0};
static char * SubMenuItem3[]= {" Item31... ", " Item32... ", " Item add... ", " Item33 ", 0 }; static char * SubMenuItem4[]= {" Item41... ", " Item42... ", " Moving Text ", " Item44 ", " Item45 ", " item ** ", 0} ; static char * SubMenuItem5[]= {" Help Index F1 ", " About... ", " System Info ",0};
static char * SubMenuItem6[]= {0};
void getitemcount(char ** ,int * ,int * ,int * );
void LoadMainMenu(void);
void LoadSubMenu(char **name, int ord);
int ManageSubMenu (void ) ;
void ManageMainMenu (void) ; void DisplayMainMenu (void ) ; int DisplaySubMenu (int ord) ; void Help_page_show(void) {return ; } ; void Exitmenu (int) ; void In_ActiveMainMenuItem(int select , char In_Active) ; void In_ActiveSubMenuItem(int ord , int select , char In_Active) ; int GetKey (void) ; void FuncProc (int ID) ; void Draw(void) ; void MoveText (void) ; void About (void) ; void MessageBox(char * Message) ; void GoodBye(char * pcInf1 , char * pcInf2) ;
void win(); char gettextattrib(); void settextattrib(); void cprintfxy();
char *textbuf; MENUTYPE MainMenu , SubMenu[INUM] ; /* int maxx, texth, textw; */
void main(void) {
clrscr(); win(0,1,SCREENMAXX+1,SCREENMAXY,'\xb0',BLUE<<4|LIGHTSHOW(GREEN)); cprintfxy(25,9,"Analytic Hierarchy Process",BLUE<<4|BLACK);
cprintfxy(26,11,"Howard.Hsu & WeiGuoZhang",BLUE<<4|BLACK); cprintfxy(33,18,"05/18/2000",BLUE<<4|BLACK); win(0,24,80,1,' ',WHITE<<4|BLUE); LoadMainMenu(); LoadSubMenu (SubMenuItem1 , 0); LoadSubMenu (SubMenuItem2 , 1); LoadSubMenu (SubMenuItem3 , 2); LoadSubMenu (SubMenuItem4 , 3); LoadSubMenu (SubMenuItem5 , 4); LoadSubMenu (SubMenuItem6 , 5); ManageMainMenu(); }
void prncharxy(char xpos,char ypos,char ch,char attrib) { char far *p=(char far *)0xb8000000; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return;
*(p+ypos%25*160+2*(xpos%80))=ch; *(p+ypos%25*160+2*(xpos%80)+1)=attrib; return; }
void cprintfxy(char xpos,char ypos,char *string,char attrib) { int len,i; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return; len=strlen(string); for(i=0;i<len;i++) prncharxy(xpos+i,ypos,string[i],attrib); return; }
void vcprintfxy(char xpos,char ypos,char string[],char attrib) { int len,i; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return; len=strlen(string); for(i=0;i<len;i++) prncharxy(xpos,ypos+i,string[i],attrib); return; }
void drawbox(char xpos,char ypos,char width,char heigh, char *edge,char attrib,char *title){
char i,j,len; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return;
prncharxy(xpos,ypos,edge[0],attrib); prncharxy(xpos+width-1,ypos,edge[2],attrib); prncharxy(xpos+width-1,ypos+heigh-1,edge[4],attrib); prncharxy(xpos,ypos+heigh-1,edge[5],attrib); for(i=0;i<width-2;i++){ prncharxy(xpos+i+1,ypos,edge[1],attrib); prncharxy(xpos+i+1,ypos+heigh-1,edge[1],attrib); } for(i=0;i<heigh-2;i++){ prncharxy(xpos,ypos+i+1,edge[3],attrib); prncharxy(xpos+width-1,ypos+i+1,edge[3],attrib); } len=strlen(title); cprintfxy(xpos+width/2-len/2,ypos,title,attrib);
for(i=0;i<heigh;i++) { settextattrib(xpos+width,ypos+i+1,(BLACK<<4)|(WHITE)); settextattrib(xpos+width+1,ypos+i+1,(WHITE)|(WHITE));
} for(i=0;i<width-2;i++) settextattrib(xpos+2+i,ypos+heigh,(BLACK<<4)|(WHITE));
for(i=1;i<heigh-1;i++) for(j=1;j<width-1;j++) prncharxy(xpos+j,ypos+i,' ',attrib);
return; }
void win(char xpos,char ypos,char width,char heigh,char ch,char attrib) { char i,j; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return; for(i=0;i<heigh;i++) for(j=0;j<width;j++) prncharxy(xpos+j,ypos+i,ch,attrib); return; }
char *malloctextbuf(char width,char heigh) { char *buf; if((buf=(char *)malloc(2*width*heigh*sizeof(char)))==NULL) return NULL; else return buf; }
void gettextxy(char xpos,char ypos,char width,char heigh,char *buf) { char i,j; char far *vp=(char far *)0xb8000000;
if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return;
if(xpos+width>SCREENMAXX) width=SCREENMAXX+1-xpos; if(xpos+heigh>SCREENMAXY) heigh=SCREENMAXY+1-ypos;
for(i=0;i<heigh;i++) for(j=0;j<2*width;j++) buf[i*2*width+j]=*(vp+(ypos+i)%25*160+2*(xpos%80)+j); return; }
char gettextattrib(char xpos,char ypos){ char far *p=(char far *)0xb8000000; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return; return(*(p+ypos%25*160+2*(xpos%80)+1)); }
void settextattrib(char xpos,char ypos,char attrib){ char far *p=(char far *)0xb8000000; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return; *(p+ypos*160+2*xpos+1)=attrib; return;
}
void puttextxy(char xpos,char ypos,char width,char heigh,char *buf) { char i,j,w,h; char far *vp=(char far *)0xb8000000; if(xpos<SCREENMINX || xpos>SCREENMAXX || ypos<SCREENMINY || ypos>SCREENMAXY) return; if(xpos+width>SCREENMAXX) w=SCREENMAXX+1-xpos; else w=width; if(ypos+heigh>SCREENMAXY) h=SCREENMAXY+1-ypos; else h=heigh;
for(i=0;i<h;i++) for(j=0;j<2*w;j++) *(vp+(ypos+i)%25*160+2*(xpos%80)+j)=buf[i*2*width+j]; return; }
void ManageMainMenu (void ) { unsigned key; int ID; DisplayMainMenu(); for(key=0;;) { key=GetKey() ; switch(key) { case LEFT : In_ActiveMainMenuItem(MainMenu.select ,0) ; if(MainMenu.select<1) /* w Already leftest item in mainmenu # */ MainMenu.select =MainMenu.itemnum - 1 ; else MainMenu.select--; In_ActiveMainMenuItem(MainMenu.select , 1 ) ; /* R Light bar N */ break ;
case RIGHT : In_ActiveMainMenuItem(MainMenu.select , 0); if(MainMenu.select>MainMenu.itemnum-2) MainMenu.select=0; else MainMenu.select++; In_ActiveMainMenuItem(MainMenu.select,1);
break;
case DOWN: case RETURN:
switch(MainMenu.COMMAND_ID[MainMenu.select] ){ case 5: /*# Exit to DOS # */ if (key==DOWN) break ; GoodBye ("Goodbye from ", "the MENU DEMO in graphics mode."); break ; default :
ID = ManageSubMenu (); if (ID >=0) FuncProc (ID); break ; } } } }
void FuncProc (int ID) { char *buf; switch ( ID ){ case 6: /*w 006 FileIQuit # */
GoodBye("Goodbye from ", "the BvIENU DEMO in graphics mode. ") ; break ; case 101: Draw() ; break ; case 302: MoveText(); break ; case 401: About ( ) ; break ; default : buf=malloctextbuf(30+2,8+1); gettextxy(25,10,30+2,8+1,buf); drawbox(25,10,30,8,edge,RED<<4|GREEN," MessgeBox "); getch(); puttextxy(25,10,30+2,8+1,buf); free(buf); break ; } }
/* ManageSubMenu() retarn an int value that is s / /# Il there is a error # / /# Return to main menu, nothing to do # / / =O or =>O; the COMMAND_ID of a menu item w */
int ManageSubMenu (void) {
MENUTYPE * mn = &SubMenu[MainMenu.select] ; unsigned key ; if(DisplaySubMenu(MainMenu.select)) /* w Out of memory * */ return -2; for(key=0;;) { key=GetKey () ; switch (key ){ case ESC: /* # return to MainMenu # */ Exitmenu(MainMenu.select); return -1 ;
case UP: In_ActiveSubMenuItem(MainMenu.select , mn->select,0); if(mn->select>0) mn->select--; else mn->select = mn->itemnum - 1 ; In_ActiveSubMenuItem(MainMenu.select , mn->select ,1 ); break ; case DOWN: In_ActiveSubMenuItem (MainMenu. select , mn ->select , 0); if (mn ->select<mn ->itemnum - 1 ) mn->select++; else mn->select=0; In_ActiveSubMenuItem (MainMenu.select , mn->select ,1); break ; case LEFT: Exitmenu (MainMenu.select); In_ActiveMainMenuItem (MainMenu.select , 0); if(MainMenu.select<1) /* e Already leftest item in mainmenu w */ MainMenu.select = MainMenu.itemnum- 1 ; else MainMenu.select-- ; In_ActiveMainMenuItem(MainMenu.select , 1) ; /* # Light bar e */ if(DisplaySubMenu(MainMenu.select) )/* Out of mentory w */
return -2; mn= &SubMenu[MainMenu.select] ;
break ; case RIGHT : Exitmenu (MainMenu.select ) ; In_ActiveMainMenuItem(MainMenu.select , 0); if(MainMenu.select>MainMenu.itemnum-2)/* # already rightest w */ MainMenu.select = 0; else MainMenu.select++ ; In_ActiveMainMenuItem (MainMenu.select , 1); if (DisplaySubMenu(MainMenu.select) ) /* # Out of memory w */ return -2 ; mn = &SubMenu[MainMenu. select]; break ; case RETURN : Exitmenu (MainMenu.select ); return mn->COMMAND_ID[mn->select] ; } } }
void LoadMainMenu() { int count ,totallen ,maxlen ,i; int beginx; MainMenu.coor[0]= SCREENMINX; MainMenu.coor[1] =SCREENMINY; MainMenu.coor[2] =SCREENMAXX; MainMenu.coor[3] =SCREENMINY;
getitemcount(MainMenuItem, &count ,&totallen ,&maxlen) ;
MainMenu.itemnum =count ; beginx=3; for(i= 0;i<count;i++) { MainMenu.itemcoor[i*4] = beginx; /* w xl # */ MainMenu.itemcoor[i*4+1] = MainMenu.coor[1]; /* w yl w */ MainMenu.itemcoor[i*4+2] = beginx+strlen(MainMenuItem[i]); /* # x2 # */ MainMenu.itemcoor[i*4+3] = MainMenu.coor[3];
MainMenu.itemdispxy[i*2] = beginx; /* w actuall disp X w */ MainMenu.itemdispxy[i*2+1] = MainMenu.coor[3]; /* w actuall disp Y w */
MainMenu.COMMAND_ID[i] = i ;
beginx=beginx+strlen(MainMenuItem[i])+1; } MainMenu.itemname = MainMenuItem ; }
void LoadSubMenu(char ** name ,int ord) { int count ,i ,j ,maxlen; getitemcount(name , &count , &i , &maxlen) ; SubMenu[ord].itemname = name ;
SubMenu [ord].itemnum =count ; j=maxlen+1; if(j+MainMenu.itemcoor[4 * ord]<WindowMaxX) /* w left text justification is OK # */ { SubMenu[ord].coor[0] =MainMenu.itemcoor[4 * ord]; /*w item's xl w */ SubMenu[ord].coor[2] =SubMenu[ord].coor[0] +j ; } else /* w Use right justification because of space w */ { SubMenu[ord].coor[2]=MainMenu.itemcoor[2]; /* # left just use X2 w */ SubMenu[ord].coor[0] =SubMenu[ord].coor[2] -j; }
if(count==0) { SubMenu[ord].coor[1] =SubMenu[ord].coor[1]+1; /* w The item's y2*/ SubMenu[ord].coor[3] =SubMenu[ord].coor[1]; }
else { SubMenu[ord].coor[1]=MainMenu.itemcoor[4*ord+3]+1; SubMenu[ord].coor[3]=SubMenu[ord].coor[1] + count+1; } for(i=0;i<count;i++) { SubMenu[ord].itemcoor[i * 4] =SubMenu[ord].coor[0]+1; SubMenu[ord].itemcoor[i * 4+1]=SubMenu[ord].coor[1]+i+1; SubMenu[ord].itemcoor[i * 4+2] =SubMenu[ord].coor[2]-1; SubMenu[ord].itemcoor[i * 4+3] = SubMenu[ord].itemcoor[i * 4+1] +i+1;
SubMenu[ord].itemdispxy[i * 2] =SubMenu[ord].itemcoor[i * 4]; SubMenu[ord].itemdispxy[i * 2+1] =SubMenu[ord].itemcoor[i * 4+1]; SubMenu[ord].COMMAND_ID[i] = ord * 100+i ; } }
void DisplayMainMenu (void ) { unsigned i ; win(MainMenu.coor[0],MainMenu.coor[1],80,1,' ',WHITE<<4|BLACK); for(i= 0 ;i<MainMenu.itemnum ;i++) { if(MainMenu.select==i) In_ActiveMainMenuItem (i , 1) ; else cprintfxy ( MainMenu.itemdispxy[i * 2], MainMenu.itemdispxy[i * 2+1] , MainMenu.itemname[i],WHITE<<4|BLACK) ; } }
char *textbuf;
int DisplaySubMenu (int ord ) { unsigned size , i; MENUTYPE * mn = &SubMenu[ord] ; textbuf=NULL; textbuf=malloctextbuf(mn->coor[2]-mn->coor[0]+1+2, mn->coor[3]-mn->coor[1]+1+1); if(textbuf==NULL) { clrscr(); printf("\nOut of memory!"); printf("\nPress any key..."); getch(); return 1; } if(mn->coor[1]==mn->coor[3]) return 0; gettextxy(mn->coor[0],mn->coor[1], mn->coor[2]-mn->coor[0]+1+2, mn->coor[3]-mn->coor[1]+1+1,textbuf);
drawbox(mn->coor[0],mn->coor[1], mn->coor[2]-mn->coor[0]+1, mn->coor[3]-mn->coor[1]+1,edge,WHITE<<4|BLACK,"");
for(i =0;i<mn->itemnum ;i++) { if(i==mn->select) In_ActiveSubMenuItem(ord , i , 1); else { cprintfxy(mn->itemdispxy[i*2],mn->itemdispxy[i*2+1],mn->itemname[i],WHITE<<4|BLACK); } } return 0 ;
}
static void Exitmenu (int ord ) { MENUTYPE *mn=&SubMenu[ord] ; if(textbuf) { puttextxy(mn->coor[0],mn ->coor[1],mn->coor[2]-mn->coor[0]+1+2, mn->coor[3]-mn->coor[1]+1+1,textbuf); free (textbuf); } }
void In_ActiveMainMenuItem(int select , char In_Active) { MENUTYPE * tp = &MainMenu ;
if (In_Active==0) /* H off w */ { cprintfxy (tp->itemdispxy[select * 2] , tp->itemdispxy[select * 2+ 1] , tp ->itemname [select],(WHITE<<4)|BLACK) ; } else { cprintfxy (tp->itemdispxy[select * 2] , tp->itemdispxy[select * 2+1] , tp ->itemname [select],(GREEN<<4)|BLUE) ; } }
void In_ActiveSubMenuItem(int ord , int select , char In_Active) { MENUTYPE * tp =&SubMenu[ord] ; if (In_Active==0) /* w off w */ { cprintfxy(tp->itemdispxy[select * 2] , tp ->itemdispxy[select * 2+1], tp ->itemname [select],(WHITE<<4)|BLACK) ; } else { cprintfxy (tp->itemdispxy[select * 2] , tp->itemdispxy[select *2+ 1], tp ->itemname[select],(GREEN<<4)|BLUE) ; } }
int GetKey(void){ int key; key=bioskey(0); if(key==F1) Help_page_show(); else if(key<<8) { key=key&0x00ff; if(isalpha(key)) key=toupper(key); } return key; }
static void getitemcount(char ** s ,int * count,int * len,int * maxlen) { int i,j; for(( * maxlen)=0,(*len)=0,i=0; s[i]!=NULL; i++) { j =strlen (s[i]); (*len)+=j; if(j>(*maxlen)) ( * maxlen) =j ; } ( *count)=i; }
void Draw(void) { int x, x1, x2, y1, y2; randomize ( ) ; do { x1 = random (WindowMaxX-WindowMinX) +WindowMinX ; y1 = random (WindowMaxY-WindowMinY) +WindowMinY ; x2 = random (WindowMaxX-WindowMinX) +WindowMinX ; y2 = random (WindowMaxY-WindowMinY) +WindowMinY ; if (x1>x2) { x = x1; x1= x2; x2=x; } if (y1>y2) { x=y1;y1 =y2;y2=x; } if(y1<1) y1=1; if(y2>23) y2=23; win(x1,y1,x2-y1+1,y2-y1+1,' ',random(256)); delay(100); }while(!bioskey(1)); }
void About (void) { char MidX, MidY, x1, y1, x2, y2, size; char *buf1; MidX = (WindowMaxX - WindowMinX)/2 ; MidY = (WindowMaxY - WindowMinY)/2 ; x1 = MidX-15; x2 = MidX+15; y1 = MidY-4; y2 = MidY+4; buf1=malloctextbuf(x2-x1+1+2,y2-y1+1+1); gettextxy(x1,y1,x2-x1+1+2, y2-y1+1+1,buf1) ;
/* win(WindowMinX,WindowMinY,WindowMaxX, WindowMaxY,' ',BLUE); */ if ( buf1==NULL) { clrscr(); printf("\nOut of memory!Press any key to exit..."); getch ( ) ; exit(1); } else { gettextxy(x1 ,y1 , x2-x1+1+2,y2-y1+1+1, buf1) ; drawbox(x1,y1,x2-x1+1,y2-y1+1,edge,WHITE," About... "); cprintfxy(MidX-strlen("Menu Demo")/2,MidY-2,"Menu Demo",RED); cprintfxy(MidX-strlen("In Text Mode")/2,MidY-1,"In Text Mode",RED); cprintfxy(MidX-strlen("05/2000 By")/2,MidY,"05/2000 By",RED); cprintfxy(MidX-strlen("Howard.Hsu")/2,MidY+1,"Howard.Hsu",RED); cprintfxy(MidX-strlen(" OK ")/2,MidY+2," OK ",GREEN); getch() ; puttextxy(x1,y1,x2-x1+1+2,y2-y1+1+1,buf1); free (buf1); } }
void DrawButtonUp(unsigned char xpos,unsigned char ypos, char *message,char attrib) { unsigned char len,i; char BackAttrib; BackAttrib= gettextattrib(xpos,ypos); len=strlen(message); prncharxy(xpos,ypos,' ',attrib); cprintfxy(xpos+1,ypos,message,attrib); prncharxy(xpos+len+1,ypos,' ',attrib); prncharxy(xpos+len+2,ypos,240,BackAttrib); for(i=0;i<=len+2;i++) prncharxy(xpos+i+1,ypos+1,220,BackAttrib); return; }
void DrawButtonDown(unsigned char xpos,unsigned char ypos, char *message,char attrib) { unsigned char len,i; char BackAttrib; BackAttrib= gettextattrib(xpos,ypos+1); len=strlen(message); prncharxy(xpos,ypos,' ',BackAttrib); prncharxy(xpos+1,ypos,' ',attrib); cprintfxy(xpos+2,ypos,message,attrib); prncharxy(xpos+len+2,ypos,' ',attrib); for(i=0;i<=len+2;i++) prncharxy(xpos,ypos+1,' ',BackAttrib); return; }
void MessageBox(char * Message) { int MidX, MidY, x1, y1, x2, y2, size, Len; char *buf1; MidX = (WindowMaxX - WindowMinX)/2 ; MidY = (WindowMaxY - WindowMinY)/2 ; Len = strlen(Message)>strlen(" MessageBox ")?strlen(Message):strlen(" MessageBox "); x1 = MidX-Len; x2=MidX+Len; y1=MidY-4; y2=MidY+4; buf1=malloctextbuf(x2-x1+1+2,y2-y1+1+1); if ( buf1==NULL) { clrscr(); printf("\nOut of memory! Press any key to continue..."); getch( ); exit(1); } else { gettextxy(x1 ,y1 , x2-x1+1+2,y2-y1+1+1, buf1) ; drawbox(x1,y1,x2-x1+1,y2-y1+1,edge,GREEN<<4|RED," MessageBox "); cprintfxy(MidX-strlen(Message)/2,MidY-1,Message,GREEN<<4|BLUE);
DrawButtonUp(MidX-strlen("OK")/2-2,MidY+2,"OK",RED); getch(); DrawButtonDown(MidX-strlen("OK")/2-2,MidY+2,"OK",RED); delay(5000);
puttextxy(x1 ,y1 ,x2-x1+1+2,y2-y1+1+1,buf1) ; free(buf1) ; } }
void MoveText (void ) { int i; char attrib; win(0,1,80,23,' ',0); for (i=random(80); i>1; i-=2)
{
attrib= gettextattrib(i,14); cprintfxy(i ,14, "Menu example !",((BLUE<<4)&0x80)|RED) ; delay(2000) ; cprintfxy(i,14, " ",attrib);
} }
void GoodBye(char * pcInf1 , char * pcInf2) { int f; clrscr ( ); window(1 ,1 ,80,1) ; textbackground (LIGHTBLUE ) ; clrscr() ; highvideo ( ); textcolor(WHITE); cprintf(pcInf1); textcolor(YELLOW); cprintf(pcInf2); window(1,1,80,25); printf("\n"); for(f=400;f<800;f+=100) { sound(f); delay(100); } nosound(); exit(0); }

|