📄 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; /*滚动行数*/
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; /*滚动行数*/
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;
}
/*喇叭发声*/
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; /*最后一个字符显示的次数,但不改变光标位置*/
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)
{ /* 画矩形框函数*/
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()
{ /* 当没有数据时,给出提示*/
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 + -