谁来帮我看看这个窗口间切换啊,真的很简单,只是我太菜
#include "stdio.h" /* 标准输入输出库 */#include "string.h" /* 字符串操作函数库 */
#include "stdlib.h" /* 标准函数库 */
#include "math.h"
#include "graphics.h" /* 图形函数库 */
#include "bios.h" /* 基本输入输出系统函数库*/
#include "dos.h" /* dos函数库 */
#include "time.h"
/*定义键码*/
#define KEY1 0x231 /* 主键盘区上数字键1 */
#define KEY2 0x332 /* 主键盘区上数字键2 */
#define KEY3 0x433 /* 主键盘区上数字键3 */
#define NUM1 0x4f31 /* 小键盘区上数字键1 */
#define NUM2 0x5032 /* 小键盘区上数字键2 */
#define NUM3 0x5133 /* 小键盘区上数字键3 */
/*定义窗口*/
struct Block
{ int left,top,width,height; /* 左上坐标,宽,高*/
char caption[50]; /* 标题 */
int fontcolor,fontsize,status; /*字体颜色,字体大小,状态 */
};
struct Block frmmain,txtscreen,cmdbutton[8]; /*定义主窗口,文本输入框,8个按钮*/
void Form(struct Block form);
void CommandButton(struct Block cmdbutton);
void TextBox(struct Block txtbox);
void M_help();
void M_start();
void InitApp();
void Showme();
void Showme_h();
void Showme_s();
void CommandButton_KeyboardDown(int i);
void CommandButton_KeyboardUp(int key);
void M_m_start();
main()
{
InitApp();
M_m_start();
}
void M_m_start()
{
int key;
Showme(); /*显示程序窗口*/
while(1)
{
if(bioskey(0)==1) continue; /*直到有键按下时,才返回非0值,否则返回0值*/
key=bioskey(1); /*返回上条语句的按键值*/
switch(key) /*捕获相应的键盘按键并匹配到计算器按键上*/
{
case NUM1: case KEY1: key=1;break;
case NUM2: case KEY2: key=2;break;
case NUM3: case KEY3: key=3;break;
default: key=-1;break;
}
if(key<0) continue; /*若对应的按键返回负数,则返回到while(1)处执行*/
else if(key==1)
{
CommandButton_KeyboardDown(1);
delay(300000);
CommandButton_KeyboardUp(1);
M_start();break;
}
else if(key==2)
{
CommandButton_KeyboardDown(2);
delay(300000);
CommandButton_KeyboardUp(2);
M_help();break;
}
else if(key==3)
{
CommandButton_KeyboardDown(3);
delay(300000);
CommandButton_KeyboardUp(3);
exit(1);break;
}
}
}
void M_start()
{
int key;
Showme_s(); /*显示程序窗口*/
while(1)
{
if(bioskey(1)==0) continue; /*直到有键按下时,才返回非0值,否则返回0值*/
key=bioskey(0); /*返回上条语句的按键值*/
switch(key) /*捕获相应的键盘按键并匹配到计算器按键上*/
{
case NUM1: case KEY1: key=1;break;
case NUM2: case KEY2: key=2;break;
case NUM3: case KEY3: key=3;break;
default: key=-1;break;
}
if(key<0) continue; /*若对应的按键返回负数,则返回到while(1)处执行*/
else if(key==1)
{
CommandButton_KeyboardDown(4);
delay(300000);
CommandButton_KeyboardUp(4);
M_m_start();break;
}
else if(key==2)
{
CommandButton_KeyboardDown(5);
delay(300000);
CommandButton_KeyboardUp(5);
M_m_start();break;
}
else if(key==3)
{
CommandButton_KeyboardDown(6);
delay(300000);
CommandButton_KeyboardUp(6);
M_m_start();break;
}
}
}
void M_help()
{
int key;
Showme_h(); /*显示程序窗口*/
while(1)
{
if(bioskey(1)==0) continue; /*直到有键按下时,才返回非0值,否则返回0值*/
key=bioskey(0); /*返回上条语句的按键值*/
switch(key) /*捕获相应的键盘按键并匹配到计算器按键上*/
{
case NUM1: case KEY1: key=1;break;
default: key=-1;break;
}
if(key<0) continue; /*若对应的按键返回负数,则返回到while(1)处执行*/
if(key==1)
{
M_m_start();
break;
}
}
}
void Showme() /*显示计算器界面*/
{ int i;
Form(frmmain); /*显示主窗口,frmmain为主窗口的结构变量名*/
for(i=1;i<=3;i++) /*显示27个按钮在计算器主窗口中*/
CommandButton(cmdbutton[i]);
}
void Showme_s() /*显示计算器界面*/
{ int i;
Form(frmmain); /*显示主窗口,frmmain为主窗口的结构变量名*/
for(i=4;i<=6;i++) /*显示27个按钮在计算器主窗口中*/
CommandButton(cmdbutton[i]);
}
void Showme_h() /*显示计算器界面*/
{
Form(frmmain); /*显示主窗口,frmmain为主窗口的结构变量名*/
TextBox(txtscreen); /*显示文本框*/
CommandButton(cmdbutton[7]);
}
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,BLUE);
bar(x1+2,y1+2,x2-2,y1+25); /*设置标题栏颜色为红色*/
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-25;
cmdbutton[0].top=5;
cmdbutton[0].width=20;
cmdbutton[0].height=20;
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 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 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 InitApp() /*初始化主程序*/
{
int driver=DETECT,mode; /* 显示设备驱动为自动检测显示器模式 */
initgraph(&driver,&mode,""); /* 初始化图形显示系统 */
if(driver!=VGA&&driver!=EGA) /* 如果不能初始化 */
{ printf("\n\nERROR!Can't initialize the graphics system!"); /* 显示错误信息"不能初始化图形系统" */
closegraph(); /* 关闭图形接口*/
exit(0); /* 直接退出系统 */
}
setbkcolor(LIGHTBLUE); /* 设置背景颜色为浅蓝色 */
/*主窗口的属性设置*/
frmmain.left=100; frmmain.top=25; frmmain.width=450; frmmain.height=350; frmmain.fontcolor=BLACK; frmmain.fontsize=1; strcpy(frmmain.caption,"SIZEYUNSUAN");frmmain.status=1;
/*文本框的属性设置*/
txtscreen.left=10;txtscreen.top=25;txtscreen.width=210;txtscreen.height=40;txtscreen.fontcolor=BLACK;txtscreen.fontsize=1;strcpy(txtscreen.caption,"0."); txtscreen.status=1;
/*命令按钮的属性设置*/
cmdbutton[1].left=185-35;cmdbutton[1].top=100;cmdbutton[1].width=150;cmdbutton[1].height=45;cmdbutton[1].fontcolor=BLUE;cmdbutton[1].fontsize=2;strcpy(cmdbutton[1].caption,"START");cmdbutton[1].status=1;
cmdbutton[2].left=185-35;cmdbutton[2].top=150;cmdbutton[2].width=150;cmdbutton[2].height=45;cmdbutton[2].fontcolor=BLUE;cmdbutton[2].fontsize=2;strcpy(cmdbutton[2].caption,"HELP"); cmdbutton[2].status=1;
cmdbutton[3].left=185-35;cmdbutton[3].top=200;cmdbutton[3].width=150;cmdbutton[3].height=45;cmdbutton[3].fontcolor=BLUE;cmdbutton[3].fontsize=2;strcpy(cmdbutton[3].caption,"EXIT");cmdbutton[3].status=1;
cmdbutton[4].left=185-35;cmdbutton[4].top=100;cmdbutton[4].width=150;cmdbutton[4].height=45;cmdbutton[4].fontcolor=BLUE;cmdbutton[4].fontsize=2;strcpy(cmdbutton[4].caption,"in ten");cmdbutton[4].status=1;
cmdbutton[5].left=185-35;cmdbutton[5].top=150;cmdbutton[5].width=150;cmdbutton[5].height=45;cmdbutton[5].fontcolor=BLUE;cmdbutton[5].fontsize=2;strcpy(cmdbutton[5].caption,"in twenty");cmdbutton[5].status=1;
cmdbutton[6].left=185-35;cmdbutton[6].top=200;cmdbutton[6].width=150;cmdbutton[6].height=45;cmdbutton[6].fontcolor=BLUE;cmdbutton[6].fontsize=2;strcpy(cmdbutton[6].caption,"return");cmdbutton[6].status=1;
cmdbutton[7].left=185-35;cmdbutton[7].top=250;cmdbutton[7].width=150;cmdbutton[7].height=45;cmdbutton[7].fontcolor=BLUE;cmdbutton[7].fontsize=2;strcpy(cmdbutton[7].caption,"return");cmdbutton[7].status=1;
}
void CommandButton_KeyboardDown(int i) /*按下某键时所做的操作*/
{
cmdbutton[i].status=0;
CommandButton(cmdbutton[i]); /*用与初始时不同的边框颜色色,重绘此命令按钮*/
}
void CommandButton_KeyboardUp(int key) /*当按键处理完后,恢复按钮状态,重绘此命令按钮*/
{
cmdbutton[key].status=1;
CommandButton(cmdbutton[key]);
}