名称:计时器beta
编写语言:devc++
备注:本程序无害.
#include<bits/stdc++.h>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
void gto(int x,int y){
COORD pos;pos.X=y*2;pos.Y=x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void gamecsh(){
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;
mode &= ~ENABLE_INSERT_MODE;
mode &= ~ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdin, mode);
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
SetWindowLongPtrA(
GetConsoleWindow(),
GWL_STYLE,
GetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE) & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX);
system("mode con cols=25 lines=8");
}
void gtoxy(int y,int x){
x-=1;y-=1;
swap(x,y);
COORD pos;pos.X=y*2;pos.Y=x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
struct Button{
int x,y,color,color2;
const char *name;
int len;
bool sfanx,dycsfanx,gs;
int dq,zq;
bool yjz;
bool sfzx;
int dqan,zqan;
};
void puto(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>=10){
puto(x/10);
putchar('0'+x%10);
}
else putchar('0'+x);
}
void GetPos(POINT &pt){
HWND hwnd=GetForegroundWindow();
GetCursorPos(&pt);
ScreenToClient(hwnd,&pt);
pt.y=pt.y/16,pt.x=pt.x/16;
}
Button NewButton(int y,int x,bool gs,const char *name){
y-=1,x-=1;
swap(x,y);
Button t;
t.x=x,t.y=y,t.name=name;
t.color=7;
t.color2=8;
t.len=strlen(name);
t.sfanx=false;
t.dycsfanx=false;
t.gs=gs;
t.zq=t.dq=1;
t.yjz=false;
t.sfzx=false;
return t;
}
int Preserve(Button &A){
if(A.sfzx)return false;
POINT pt;
GetPos(pt);
if(A.dq!=A.zq||!A.yjz) {
A.yjz=true;
if(A.gs){
if(A.sfanx)color(A.color2);
else color(A.color);
A.yjz=true;
}
else color(A.color);
gto(A.x,A.y);
printf("%s",A.name);
}
if(pt.y==A.x&&(pt.x>=A.y&&pt.x<=A.y+A.len/2)){
A.dq=1;
if(A.dq!=A.zq||(A.gs&&A.dqan!=A.zqan)){
if(A.gs){
if(A.sfanx)color(A.color);
else color(A.color2);
}
else color(A.color2);
gto(A.x,A.y);
printf("%s",A.name);
}
if(KEY_DOWN(VK_LBUTTON)||KEY_DOWN(VK_MBUTTON)|KEY_DOWN(VK_RBUTTON)) {
if(!A.dycsfanx)A.dycsfanx=true;
if(A.gs){
A.sfanx=!A.sfanx;
if(A.gs){
if(A.sfanx)color(A.color);
else color(A.color2);
}
else color(A.color2);
gto(A.x,A.y);
printf("%s",A.name);
}
A.zqan=A.dqan;
if(KEY_DOWN(VK_LBUTTON))A.dqan=1;
else if(KEY_DOWN(VK_MBUTTON))A.dqan=2;
else if(KEY_DOWN(VK_RBUTTON))A.dqan=3;
A.zq=A.dq;
if(pt.y==A.x&&(pt.x>=A.y&&pt.x<=A.y+A.len/2))A.dq=1;
else A.dq=0;
Sleep(100);
if(!A.gs)return A.dqan;
Sleep(50);
return A.sfanx;
}
}
A.zqan=A.dqan;
if(KEY_DOWN(VK_LBUTTON))A.dqan=1;
else if(KEY_DOWN(VK_MBUTTON))A.dqan=2;
else if(KEY_DOWN(VK_RBUTTON))A.dqan=3;
else A.dqan=0;
A.zq=A.dq;
if(pt.y==A.x&&(pt.x>=A.y&&pt.x<=A.y+A.len/2))A.dq=1;
else A.dq=0;
return A.sfanx;
}
void Buttonname(Button &A,const char *name){
gto(A.x,A.y);
for(int i=0;i<A.len;i++)putchar(' ');
A.name=name;
A.len=strlen(name);
A.dq=1;
A.zq=0;
A.yjz=false;
}
void hideButton(Button A){
gto(A.x,A.y);
for(int i=0;i<A.len;i++)putchar(' ');
}
void showButton(Button A){
A.yjz=false;
Preserve(A);
}
Button Sa[4],Sj[4],qd=NewButton(7,11,0,"开始"),gl=NewButton(7,7,0,"归零"),ztjx=NewButton(7,7,0,"暂停"),sett=NewButton(7,1,0,"设置");
int hour,minute,second;
int xhour,xminute,xsecond;
double num,qznum,hznum;
int dqnum=-1,okk=1;
int sysjtz=1,sysjbfb=1;
string str="~时间到了!~";
char mnfcc[16][51];
void jsqcsh(){
color(7);
gtoxy(4,5);
putchar(':');
gtoxy(4,9);
putchar(':');
for(int i=0;i<3;i++){
int x=3+i*4;
Sa[i]=NewButton(2,x,0,"+");
Sj[i]=NewButton(6,x,0,"-");
gtoxy(4,x);
puto(0);
}
showButton(qd);
showButton(gl);
}
void drawjdq(int n){
for(int i=0;i<n;i++)putchar('#');
for(int i=0;i<10-n;i++)putchar(' ');
}
int main(){
SetConsoleTitle("计时器");
gamecsh();
jsqcsh();
xhour=xminute=xsecond=hour=minute=second=0;
begin:Buttonname(qd,"开始");
color(7);
okk=1;
dqnum=0;
Buttonname(ztjx,"暂停");
hideButton(ztjx);
gtoxy(4,3);
if(xhour>9||hour<10)puto(xhour);
else{
putchar(' ');
putchar(' ');
gtoxy(4,3);
puto(xhour);
}
gtoxy(4,7);
if(xminute>9||minute<10)puto(xminute);
else{
putchar(' ');
putchar(' ');
gtoxy(4,7);
puto(xminute);
}
gtoxy(4,11);
if(xsecond>9||second<10)puto(xsecond);
else{
putchar(' ');
putchar(' ');
gtoxy(4,11);
puto(xsecond);
}
hour=xhour;
minute=xminute;
second=xsecond;
for(int i=0;i<3;i++){
showButton(Sa[i]);
showButton(Sj[i]);
}
showButton(qd);
showButton(gl);
showButton(sett);
while(1){
if(Preserve(sett)){
Sleep(75);
system("cls");
sett.yjz=false;
Button sysjbfbt=NewButton(1,1,0,"剩余时间百分比显示(开启)");
Button sysjtzt=NewButton(2,1,0,"剩余时间条状显示(开启)");
Button tscgg=NewButton(3,1,0,"更改提醒词");;
if(!sysjbfb)Buttonname(sysjbfbt,"剩余时间百分比显示(关闭)");
if(!sysjtz)Buttonname(sysjtzt,"剩余时间条状显示(关闭)");
while(!Preserve(sett)){
if(Preserve(sysjbfbt)){
if(sysjbfb)Buttonname(sysjbfbt,"剩余时间百分比显示(关闭)");
else Buttonname(sysjbfbt,"剩余时间百分比显示(开启)");
sysjbfb=!sysjbfb;
}
if(Preserve(sysjtzt)){
if(sysjtz)Buttonname(sysjtzt,"剩余时间条状显示(关闭)");
else Buttonname(sysjtzt,"剩余时间条状显示(开启)");
sysjtz=!sysjtz;
}
if(Preserve(tscgg)){
system("cls");
system("mode con cols=40 lines=10");
color(7);
printf("请输入新的提醒词:");
getline(cin,str);
printf("提示词设置成功.\n");
system("pause");
system("mode con cols=25 lines=8");
showButton(sett);
showButton(sysjtzt);
showButton(sysjbfbt);
showButton(tscgg);
}
}
Sleep(75);
hideButton(tscgg);
hideButton(sysjbfbt);
hideButton(sysjtzt);
jsqcsh();
}
if(Preserve(gl)){
color(7);
int zhour=hour,zminute=minute,zsecond=second;
hour=minute=second=0;
if(zhour!=0){
gtoxy(4,3);
putchar('0');
if(zhour>=10)putchar(' ');
}
if(zminute!=0){
gtoxy(4,7);
putchar('0');
if(zminute>=10)putchar(' ');
}
if(zsecond!=0){
gtoxy(4,11);
putchar('0');
if(zsecond>=10)putchar(' ');
}
}
if(Preserve(qd))break;
for(int i=0;i<3;i++){
if(Preserve(Sa[i])){
color(7);
if(i==0){
gtoxy(4,3);
if(hour<23){
hour++;
puto(hour);
}
else {
hour=0;
putchar('0');
putchar(' ');
}
}
if(i==1){
gtoxy(4,7);
if(minute<59){
minute++;
puto(minute);
}
else {
minute=0;
putchar('0');
putchar(' ');
}
}
if(i==2){
gtoxy(4,11);
if(second<59){
second++;
puto(second);
}
else{
second=0;
putchar('0');
putchar(' ');
}
}
Sleep(75);
}
if(Preserve(Sj[i])){
color(7);
if(i==0){
if(hour>0)hour--;
else hour=23;
gtoxy(4,3);
if(hour==9){
putchar('9');
putchar(' ');
}
else puto(hour);
}
if(i==1){
if(minute>0)minute--;
else minute=59;
gtoxy(4,7);
if(minute==9){
putchar('9');
putchar(' ');
}
else puto(minute);
}
if(i==2){
if(second>0)second--;
else second=59;
gtoxy(4,11);
if(second==9){
putchar('9');
putchar(' ');
}
else puto(second);
}
Sleep(75);
}
}
}
xhour=hour;
xminute=minute;
xsecond=second;
hznum=(double)(xhour*3600+xminute*60+xsecond);
qznum=hznum;
num=100.0000;
Buttonname(qd,"停止");
for(int i=0;i<3;i++)hideButton(Sa[i]);
for(int i=0;i<3;i++)hideButton(Sj[i]);
hideButton(gl);
hideButton(sett);
clock_t start;
start = clock();
color(7);
if(xhour+xminute+xsecond!=0){
if(sysjbfb){
gtoxy(1,1);
printf("100.0000");
putchar('%');
}
if(sysjtz){
if(!sysjbfb)gtoxy(1,4);
putchar(' ');
for(int i=0;i<10;i++)putchar('#');
}
}
showButton(ztjx);
while(hour!=0||minute!=0||second!=0){
if(Preserve(ztjx)){
int nowtime=clock()-start;
Buttonname(ztjx,"继续");
Sleep(75);
while(!Preserve(ztjx))if(Preserve(qd))goto end;
Buttonname(ztjx,"暂停");
start=clock()-nowtime;
}
if(Preserve(qd))goto end;
if(clock()-start>=999){
start = clock();
color(7);
second--;
if(second==-1){
if(minute>0){
minute--;
second=59;
gtoxy(4,7);
if(minute==9){
putchar('9');
putchar(' ');
}
else puto(minute);
}
else{
if(hour>0){
hour--;
minute=59;
second=59;
gtoxy(4,3);
if(hour==9){
putchar('9');
putchar(' ');
}
else puto(hour);
gtoxy(4,7);
if(minute==9){
putchar('9');
putchar(' ');
}
else puto(minute);
}
}
}
if(sysjtz||sysjbfb){
qznum=(double)(hour*3600+minute*60+second*1);
num=qznum/hznum*100.0;
}
if(sysjbfb&&okk==1){
gtoxy(1,1);
for(int i=0;i<7;i++)putchar(' ');
okk=0;
}
if(sysjbfb){
gtoxy(1,1);
if(num>=10)printf("%.4lf",num);
else{
gtoxy(1,1);
printf("%.4lf",num);
}
putchar('%');
putchar(' ');
putchar(' ');
}
if(sysjtz){
if(!sysjbfb){
gtoxy(1,4);
putchar(' ');
}
if(dqnum!=10&&num<=100.00&&num>=90.00)dqnum=10;
else if(dqnum!=9&&num<90.00&&num>=80.00)dqnum=9;
else if(dqnum!=8&&num<80.00&&num>=70.00)dqnum=8;
else if(dqnum!=7&&num<70.00&&num>=60.00)dqnum=7;
else if(dqnum!=6&&num<60.00&&num>=50.00)dqnum=6;
else if(dqnum!=5&&num<50.00&&num>=40.00)dqnum=5;
else if(dqnum!=4&&num<40.00&&num>=30.00)dqnum=4;
else if(dqnum!=3&&num<30.00&&num>=20.00)dqnum=3;
else if(dqnum!=2&&num<20.00&&num>=10.00)dqnum=2;
else if(dqnum!=1&&num<=10.00&&num>=00.00)dqnum=1;
drawjdq(dqnum-1);
}
gtoxy(4,11);
if(second==9){
putchar('9');
putchar(' ');
}
else puto(second);
}
}
hideButton(ztjx);
hideButton(qd);
end:if(sysjbfb){
gtoxy(1,1);
for(int i=0;i<9;i++)putchar(' ');
}
if(sysjtz){
if(!sysjbfb)gtoxy(1,4);
putchar(' ');
for(int i=0;i<11;i++)putchar(' ');
}
if(hour+minute+second==0)MessageBox(NULL,str.c_str(),"计时器",MB_SYSTEMMODAL);
goto begin;
return 0;
}