我想做一个界面,上面有一些模块,每个模块在界面上表现为一几何图形,我想做成当某一个模块被选中是,颜色发生变化,然后用键盘上的光标移动键(上,下,左,右)来改变被选中的模块,用回车控制进入某个模块,各位谁有这方面的文章,共享一下,谢谢!!
[此贴子已经被作者于2006-1-26 21:26:10编辑过]
/***************************希望对你有用^_^******************************/
#include<graphics.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define N 1000
int *buffer; /*保存屏幕内容到缓冲区的指针*/
/******************主函数*********************/
main()
{
int gd,md;
gd=DETECT;
initgraph(&gd,&md,"");
settextstyle(0,0,2);
Information(120,400,2,"Press <Enter> to come in!");
Menu_Preface();
Out_Tittle();
choose(80);
}
/****************显示菜单函数****************/
Menu_Preface()
{
int i,size;
int x,y,r; /*x,y为起始位置,r为椭圆半径*/
x=70; y=70; r=20;
clrscr(); /*清除文本*/
cleardevice(); /*清除图形*/
setbkcolor(1);
border(10,10,630,470,10,4,2,11,0);
setfillstyle(1,4);
setcolor(2);
circle(x,y,r);
floodfill(x,y,2);
size=imagesize(x-r,y-r,x+r,y+r);
buffer=malloc(size);
getimage(x-r,y-r,x+r,y+r,buffer);
sun(13,5);
gotoxy(15,13);
}
/*********发声函数**********/
sun(int i,int n)
{
sound(100*i);
for(i=1;i<=n;i++)
delay(6*N/10);
nosound();
}
/**********输出菜单文字和图标函数***********/
Out_Tittle()
{
int i;
setcolor(2);
outtextxy(40,60,"para");
outtextxy(130,60,"Build");
outtextxy(240,60,"Show");
outtextxy(350,60,"nbx");
outtextxy(432,60,"About");
outtextxy(540,60,"quit");
for(i=1;i<=6;i++)
{ setcolor(1+i);
ellipse(100*i-30,70,0,360,40,25);
}
}
/***********闪烁字母函数,用于提示操作*************/
Information(int x,int y,int c,char *s)
{
int i=0;
setcolor(c);
outtextxy(x,y,s);
while(!kbhit())
{ outtextxy(x+95,y,"<Enter>");
setcolor(i+1);
i++;
delay(5*N);
}
getch();
}
/************************通用边框函数*************************/
border(int x,int y,int m,int n,int d ,int curr_c,int fill_c,int fill_mode,int flag)
{
setcolor(curr_c);
setfillstyle(fill_mode,fill_c);
rectangle(x,y,m,n);
rectangle(x+d,y+d,m-d,n-d);
if(d>1) floodfill(x+1,y+1,curr_c);
if(flag==1) /*表示内外边框也填充*/
{ setfillstyle(1,fill_c);
floodfill(x+d+1,y+d+1,curr_c);
}
}
/********************选择菜单函数**********************/
choose(int x)
{
char c;
do
{ Out_Tittle();
c=getch();
switch(c)
{ case 77 : { x=x+100;
putimage(x-30-100,80-30,buffer,1);
if(x>580) x=80;
putimage(x-30,80-30,buffer,0);
sun(12,4); Out_Tittle(); break;
}
case 75 : { x=x-100;
putimage(x-30+100,80-30,buffer,1);
if(x<80) x=580;
putimage(x-30,80-30,buffer,0);
sun(12,4); Out_Tittle(); break;
}
case 13: { sun(13,6);
switch(x)
{ case 80 : { /*此处填写你按下回车键后执行的事件*/ Menu_Preface(); break; }
case 180 : { /*此处填写你按下回车键后执行的事件*/ Menu_Preface(); break; }
case 280 : { /*此处填写你按下回车键后执行的事件*/ Menu_Preface(); break; }
case 380 : { /*此处填写你按下回车键后执行的事件*/ Menu_Preface(); break; }
case 480 : { /*此处填写你按下回车键后执行的事件*/ Menu_Preface(); break; }
case 580 : { closegraph(); free(buffer); exit(0); }
} /*与switch(x)配对*/
x=80; break;
} /*与case 13配对*/
} /*与switch(c)配对*/
}while(c!=27); /*按ESC键退出*/
}