?? diy.c
字號:
/*清除屏幕*/
void My_clrscr(int x1,int y1,int x2,int y2,int bkcolor)
{
if(x1<1 ||y1<1 ) return;
if(y2>25||x2>80) return;
if(x1>x2||y1>y2) return;
regs.h.ah=6; /*子功能號*/
regs.h.al=0; /*滾動行數(shù)*/
regs.h.bh=bkcolor*16;
regs.h.ch=y1-1;
regs.h.cl=x1-1;
regs.h.dh=y2;
regs.h.dl=x2;
int86(16,®s,®s);
}
/*窗口滾屏*/
void Window_roll(int x1,int y1,int x2,int y2,int direct,int step,int bkcolor)
{
union REGS regs;
if(x1<1 ||y1<1 ) return;
if(y2>25||x2>80) return;
if(x1>x2||y1>y2||
direct>2||direct<1) return;
regs.h.ah=5+direct;/*ah=06h 向上滾動當前頁*/
/*ah=07h 向下滾動當前頁*/
regs.h.al=step; /*滾動行數(shù)*/
regs.h.bh=bkcolor*16;
regs.h.ch=y1-1; /*左上角行*/
regs.h.cl=x1-1; /*列*/
regs.h.dh=y2; /*右下角行*/
regs.h.dl=x2; /*列*/
int86(16,®s,®s);
}
/*打開或關閉光標*/
void Cursor(int on_off)
{
union REGS regs;
if (on_off!=0) on_off=10;
regs.h.ah=1;
regs.h.ch=3;
regs.h.cl=on_off;
int86(16,®s,®s);
}
/*時間精確延遲*/
void My_delay(float t)
{ /* 單位為秒,可以精確到0.000001秒*/
clock_t OldTime;/* time_t,long */
if (t<=0) return;
OldTime=clock(); /*確定處理器時間*/
while((clock()-OldTime)/18.2<t)
if(kbhit())break;
}
/*喇叭發(fā)聲*/
void My_sound(int frequency,float time)
{
if (time<0||NO_SOUND) return;
sound(frequency);
My_delay(time);
nosound();
}
/*設置前景色和背景色*/
void My_setcolor(int QJcolor,int BKcolor)
{
textcolor(QJcolor);
textbackground(BKcolor);
}
/*顯示一個字符串*/
void My_puts(char *s,int QJcolor,int BKcolor)
{
union REGS regs;
int color,x,y;
x=wherex();
y=wherey();
color=16*BKcolor+QJcolor;
while(*s)
{
regs.h.ah=9;
regs.h.al=*s;
regs.h.bh=0;
regs.h.bl=color;
regs.x.cx=1; /*最后一個字符顯示的次數(shù),但不改變光標位置*/
int86(16,®s,®s);
x++;
if(x>80)
{ x=1;
y++;
}
if(y>25) y=25;
gotoxy(x,y);
s++;
}
}
/*打印一個矩形*/
int Box(int x1,int y1,int x2,int y2,int color,int bkcolor)
{ /* 畫矩形框函數(shù)*/
int i;
char back[2];
struct text_info ti;
if(x1>x2||y1>y2||x1<1||x2>80||y1<1||y2>25) return 0;
gettextinfo(&ti); /* 獲得當前窗口的文本信息*/
window(x1,y1,x2,y2);textcolor(color);textbackground(bkcolor);
putch(0xd9); /* 將框右下角保存*/
gettext(x1,y1,x1,y1,back);gotoxy(1,1);
putch(0xda); /* 畫框左上角*/
for(i=2;i<=x2-x1;i++) putch(0xc4); /* 畫框上邊*/
putch(0xbf); /* 畫框右上角*/
for(i=2;i<=y2-y1;i++)
{ /* 畫框的左右兩邊*/
gotoxy(1,i); putch(0xb3);
gotoxy(x2-x1+1,i); putch(0xb3);
}
gotoxy(1,y2); putch(0xc0); /* 畫框左下角*/
for(i=2;i<=x2-x1;i++) putch(0xc4);/* 畫框下邊*/
puttext(x2,y2,x2,y2,back); /* 畫框右下角,為了避免光標下移,所以用了puttext()*/
window(ti.winleft,ti.wintop,ti.winright,ti.winbottom);
textbackground(ti.attribute>>4);textcolor(ti.attribute&0x000f);
gotoxy(ti.curx,ti.cury);
}
int Pause()
{ /* 暫停*/
int select=0,msx,msy,msz;
do{
select=Msread(&msx,&msy,&msz);
}while(select==-1&&msz!=2&&msz!=3);
Nomouse();return select==-1?msz:select;
}
/****************************************************************************/
int Warning(char question[])
{
int slect,msx,msy,msz,old_slect=-1;
char back[51*9*2];
Nomouse();gettext(17,9,67,17,back);
window(17,9,67,17); textbackground(2);clrscr();
textcolor(15);gotoxy(46,1);cprintf("- X");
window(18,10,66,16);textbackground(9);clrscr();
cprintf("%s",question);
gotoxy(15,6);textcolor(7);cprintf(" YES ");
textcolor(4);gotoxy(15,6);cprintf(" Y");
textbackground(3);old_slect=-1; /* 默認選中" NO "*/
gotoxy(30,6);textcolor(7);cprintf(" NO ");
textcolor(4);gotoxy(30,6);cprintf(" N");
My_sound(1000,0.04);My_sound(80,0.05);
while(1)
{
slect=Msread(&msx,&msy,&msz);
if((Msinbox(360,112,425,120)&&slect==-1) || slect==RIGHT)
{ /* 向右或是鼠標停在"NO"按鈕上,old_slect!=RIGHT用來避免重復此語句*/
if(old_slect!=RIGHT)
{ Nomouse();
textbackground(9);
gotoxy(15,6);textcolor(7);cprintf(" YES ");
textcolor(4);gotoxy(15,6);cprintf(" Y");
textbackground(3);
gotoxy(30,6);textcolor(7);cprintf(" NO ");
textcolor(4);gotoxy(30,6);cprintf(" N");
old_slect=RIGHT;
} /*在"NO"上點了鼠標左鍵*/
if(msz==1) { Nomouse();puttext(17,9,67,17,back);return ERROR;}
}
if((Msinbox(245,112,310,120)&&slect==-1) || slect==LEFT)
{ /* 向左或是鼠標停在"YES"按鈕上,old_slect!=LEFT用來避免重復此語句*/
if(old_slect!=LEFT)
{ Nomouse();
textbackground(9);
gotoxy(30,6);textcolor(7);cprintf(" NO ");
textcolor(4);gotoxy(30,6);cprintf(" N");
textbackground(3);
gotoxy(15,6);textcolor(7);cprintf(" YES ");
textcolor(4);gotoxy(15,6);cprintf(" Y");
old_slect=LEFT;
} /*在"YES"上點了鼠標左鍵*/
if(msz==1) break;
}
/* 若在"NO"上點了確定,或按了'n',
或是按了Esc鍵或是按了鼠標右鍵就表示退出*/
if( (slect==ENTER&&(old_slect==RIGHT||old_slect==-1))||
slect==NO||slect==ESC||msz==2||
(msz==1&&Msinbox(510,63,520,72)))/*點擊小差*/
{ Nomouse();puttext(17,9,67,17,back);
return ERROR;
}
/* 若在"YES"上點了確定,或按了'y',就表示確定了*/
if( ( slect==ENTER&&old_slect==LEFT) || slect==YES) break;
}/* while*/
Nomouse();puttext(17,9,67,17,back);return OK;
}
/****************************************************************************/
int YES_NO()
{ /* 確認*/
int slect=0,msx,msy,msz;
My_sound(500,0.09);
do{
slect=Msread(&msx,&msy,&msz);
if(slect==ESC||msz==2) slect=NO; /* ESC 鍵和鼠標右鍵表示否*/
if(slect==ENTER||msz==3) slect=YES;/* Enter 鍵和鼠標雙鍵表示是*/
}while(slect!=YES&&slect!=NO); /* 只有輸入‘y'或‘n'或Esc或點擊右鍵時才能跳出*/
Nomouse();return slect;
}
int No_Data()
{ /* 當沒有數(shù)據時,給出提示*/
char nodata[]={"\r\n There are no any data!\r\n\n Press any key to quit ..."};
Attention(nodata,parten.RANGE_COLOR,2,14);
return OK;
}
int Attention(char str[],short bkc1,short bkc2,short qjc)
{
int slect,msx,msy,msz;
char back[41*7*2];
gettext(20,10,60,16,back);
if(bkc1==7||bkc1==15) bkc1=4;
textbackground(bkc1);window(20,10,60,16);clrscr();
textcolor(15);gotoxy(37,1);cprintf("- X");
textbackground(bkc2);window(21,11,59,15);clrscr();
textcolor(qjc); cputs(str);
My_sound(600,0.08);
do{
slect=Msread(&msx,&msy,&msz);
if(Msinbox(58*8,4*18,60*8,5*16)&&msz==1) msz=2;/* 單擊小差58*8,4*18,60*8,5*16*/
}while(slect==-1&&msz!=2);
puttext(20,10,60,16,back);Nomouse(); return slect;
}
int Exit() /*設置退出界面*/
{
char *str={"\r\n ATTENTION\r\n\n Do you want to quit or not? <Y/N>"};
int order;
order=Warning(str);
window(1,1,80,25);
if(order!=OK) return;
textbackground(0);clrscr();
window(23,5,60,18);Box(21,4,58,19,6,6);
textcolor(15);
cprintf("\r\n =========== THANK YOU ==========\r\n\n\n");
textcolor(9);
cprintf(" MadeBy: XQL \r\n");
cprintf(" My QQ: 527274766 \r\n");
cprintf(" E-mail: 0501xql@163.com \r\n");
cprintf(" MadeIn: CSU 24#105 \r\n\n");
cprintf(" Thank you for your use!\r\n\n\n");
textcolor(2);
cprintf(" Press any key to quit.....");
Pause();exit(0);
}
int Ver()
{ /* 版本信息*/
char back[39*10*2];
gettext(19,9,57,18,back);
window(19,9,57,18);
textbackground(parten.RANGE_COLOR);clrscr();
textcolor(14);cprintf("\r\n Ver");
window(20,11,56,17);
textbackground(parten.RANGE_COLOR+3);clrscr();
textcolor(parten.RANGE_COLOR+5);
cprintf("\r\n MadeBy: XQL \r\n");
cprintf(" My QQ: 527274766 \r\n");
cprintf(" E-mail: 0501xql@163.com \r\n");
cprintf(" MadeIn: CSU 24#105 \r\n");
cprintf(" Ver 1.00 -- 2009.02.23 \r\n");
Pause();
puttext(19,9,57,18,back);
return 1;
}
int Help()
{ /* 幫助*/
char back[39*10*2];
gettext(19,8,57,17,back);
window(19,8,57,17); textbackground(parten.RANGE_COLOR);clrscr();
textcolor(14);cprintf("\r\n Help");
window(20, 10,56,16); textbackground(parten.RANGE_COLOR+3);clrscr();
textcolor(parten.RANGE_COLOR+5);
cprintf("\r\n 1. You can use mouse and keybord to do it!\r\n");
cprintf(" 2. The menus and fast keybord hit has the same result.\r\n");
cprintf(" 3. Than you for your use !!!");
Pause();
puttext(19,8,57,17,back);
return 1;
}
int About_me()
{ /* 關于作者*/
FILE *fp=fopen("ReadMe.txt","r");
if(!fp) {Warning("\r\n\n The file for help is lost..."); return;}
system("NOTEPAD.exe ReadMe.txt");
return 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -