分享
 
 
 

TC20写的DOS底下文本菜单

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

很象用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);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有