📄 calc.c
字号:
Label(lblstore); /*显示记忆器的状态标签*/
for(i=1;i<28;i++) /*显示27个按钮在计算器主窗口中*/
CommandButton(cmdbutton[i]);
}
void Load() /*初始化默认值*/
{ num1=num2=0;
Resetbuf();
ctnflag=FALSE;
operatoror=0;
runflag=FALSE;
errorflag=FALSE;
store=0;
clickflag=FALSE;
strcpy(txtscreen.caption,"0.");
TextBox(txtscreen);/*文本框中初始显示为0.的字符*/
strcpy(lblstore.caption,"");
Label(lblstore);
}
void Unload() /*退出系统*/
{
cleardevice(); /*清除图形屏幕*/
closegraph(); /*关闭图形系统*/
exit(0);
}
void Resetbuf()
{ strbuf[0]=' ';
strbuf[1]=0;
top=1;
digitkeyhit=FALSE;
pointflag=FALSE;
}
void Form(struct Block form) /* 构造和显示主窗口*/
{ int x1=form.left; /*窗口左上角的横坐标值*/
int y1=form.top; /*窗口左上角的纵坐标值*/
int x2=form.width+x1-1;/*窗口右下角的横坐标值*/
int y2=form.height+y1-1; /*窗口右下角的纵坐标值*/
setfillstyle(SOLID_FILL,LIGHTGRAY); /*设置填充模式和颜色 */
bar(x1+1,y1+1,x2-1,y2-1); /*画一个淡灰色的填充窗口,作为主窗口,但此函数不画出边框*/
setcolor(WHITE); /*设置当前画线颜色*/
line(x1,y1,x2,y1);
line(x1,y1,x1,y2); /*用白线画边框左边和上边的线,美化主窗口*/
setcolor(DARKGRAY); /*设置填充模式和颜色 */
line(x2,y1,x2,y2);
line(x1,y2,x2,y2); /*用深灰色画边框右边和下边的线,美化主窗口*/
setfillstyle(SOLID_FILL,RED);
bar(x1+2,y1+2,x2-2,y1+15); /*设置标题栏颜色为红色*/
settextjustify(LEFT_TEXT,CENTER_TEXT); /*设置文本的对齐方式为左中对齐*/
settextstyle(DEFAULT_FONT,0,form.fontsize); /*设置文本显示字体为默认字体,大小为主窗体字体大小*/
setcolor(form.fontcolor);
outtextxy(x1+3,y1+10,form.caption); /*用主窗体的颜色显示标题在标题栏*/
if(form.status&1) /*判断窗口是否可用,未使用ALT+X键,右上角的X按钮*/
{ cmdbutton[0].left=form.width-15;
cmdbutton[0].top=3;
cmdbutton[0].width=12;
cmdbutton[0].height=12;
cmdbutton[0].status=1;
cmdbutton[0].caption[0]=0;
CommandButton(cmdbutton[0]);
x1=cmdbutton[0].left+form.left;
y1=cmdbutton[0].top+form.top;
x2=cmdbutton[0].width+x1-1;
y2=cmdbutton[0].height+y1-1;
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(x1+1,y1+1,x2-1,y2-1);
setcolor(DARKGRAY);
line(x1+2,y1+2,x2-2,y2-2);
line(x2-2,y1+2,x1+2,y2-2);
}
}
void TextBox(struct Block txtbox) /* 设置和显示输入框*/
{ /*(x1,y1),(x2,y2)为主窗口中的相对坐标*/
int x1=txtbox.left+frmmain.left;
int y1=txtbox.top+frmmain.top;
int x2=txtbox.width+x1-1;
int y2=txtbox.height+y1-1;
setfillstyle(SOLID_FILL,WHITE);
bar(x1+1,y1+1,x2-1,y2-1);
/*因bar()不画出边框,所以接下来画这个方本框的边框线*/
setcolor(LIGHTGRAY);
rectangle(x1+1,y1+1,x2-1,y2-1);
setcolor(DARKGRAY);
line(x1,y1,x2,y1);
line(x1,y1,x1,y2);
setcolor(WHITE);
line(x2,y1,x2,y2);
line(x1,y2,x2,y2);
settextjustify(RIGHT_TEXT,CENTER_TEXT); /*为图形函数设置文本的对齐方式,第一参数为水平对齐方式,第二参数为垂直对齐方式*/
settextstyle(DEFAULT_FONT,0,txtbox.fontsize); /*为图形输出设置当前的文本属性:字体,方向,大小*/
setcolor(txtbox.fontcolor); /*设置方本框的字体颜色*/
outtextxy(x2-10,(y1+y2)/2,txtbox.caption); /*在指定位置显示txtbox.caption的字符串值*/
}
void Label(struct Block label) /*设置和显示计算器记忆功能的使用状态,默认为空*/
{ int x1=label.left+frmmain.left;
int y1=label.top+frmmain.top;
int x2=label.width+x1-1;
int y2=label.height+y1-1;
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(x1+1,y1+1,x2-1,y2-1);
setcolor(DARKGRAY);
line(x1,y1,x2,y1);
line(x1,y1,x1,y2);
setcolor(WHITE);
line(x2,y1,x2,y2);
line(x1,y2,x2,y2);
settextjustify(CENTER_TEXT,CENTER_TEXT);
settextstyle(DEFAULT_FONT,0,label.fontsize);
setcolor(label.fontcolor);
outtextxy((x1+x2)/2,(y1+y2)/2,label.caption);
}
void CommandButton(struct Block cmdbutton) /*设置和显示单个按钮*/
{ /*(x1,y1),(x2,y2)为主窗口中的相对坐标*/
int x1=cmdbutton.left+frmmain.left;
int y1=cmdbutton.top+frmmain.top;
int x2=cmdbutton.width+x1-1;
int y2=cmdbutton.height+y1-1;
int c1,c2;
/*按钮的初始状态为1,若有键按下后,其状态变为0,处理完按键操作后,又恢复为状态1*/
if(cmdbutton.status) /*根据按钮的当前状态值来,分别用不同的颜色边框来重绘此按钮*/
{ c1=WHITE; /*白色*/
c2=DARKGRAY; /*深灰色*/
}
else /*若刚有键按下*/
{ c1=DARKGRAY;
c2=WHITE;
}
setcolor(c1);
line(x1,y1,x2,y1);
line(x1,y1,x1,y2);
setcolor(c2);
line(x2,y1,x2,y2);
line(x1,y2,x2,y2);
settextjustify(CENTER_TEXT,CENTER_TEXT);
settextstyle(DEFAULT_FONT,0,cmdbutton.fontsize);
outtextxy((x1+x2)/2,(y1+y2)/2,cmdbutton.caption);
}
void CommandButton_KeyboardDown(int i) /*按下某键时所做的操作*/
{ clickflag=TRUE; /*键盘点击标志*/
cmdbutton[i].status=0;
CommandButton(cmdbutton[i]); /*用与初始时不同的边框颜色色,重绘此命令按钮*/
}
void CommandButton_KeyboardUp(int key) /*当按键处理完后,恢复按钮状态,重绘此命令按钮*/
{ clickflag=FALSE;
cmdbutton[key].status=1;
CommandButton(cmdbutton[key]);
}
void CommandButton_Click(int key) /*处理相应按键操作*/
{
if(errorflag==TRUE) return;
switch(key)
{ case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9: /*1-9*/
if(top<15) /*单个操作数小于15位*/
{ strbuf[top++]='0'+key; /*'0'+key表示是字符1,若没有'0'+则存储的是Ascll码为key为字符*/
strbuf[top]=0; /*存储的是ASCLL码为0的表示的字符Ctrl+@*/
digitkeyhit=TRUE; /*表示已有数字键按下*/
strcpy(txtscreen.caption,strbuf); /*在文本框中显示当前的*/
}
runflag=FALSE; /*运算标记为假*/
if(ctnflag==FALSE) operatoror=0;
break;
case 10: /* 0输入*/
if(top<15&&top!=1)
{ strbuf[top++]='0';
strbuf[top]=0;
strcpy(txtscreen.caption,strbuf);
}
digitkeyhit=TRUE;
runflag=FALSE;
if(ctnflag==FALSE) operatoror=0;
break;
case 11: /*正负互换*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -