求助:用C语言如何实现图形菜单界面

qingkongxiaoyang 2007-05-26 05:47:52
我想用C语言实现一个菜单图形界面,可是怎么都做不好.下面的程序,总有问题.高手帮帮忙,可以吗?谢谢啦.
#include "graphics.h"
#include "stdio.h"
#define ALT_F 33
#define ALT_E 18
#define ALT_X 45
#define KEY_ESC 27
#define KEY_LEFT 75
#define KEY_RIGHT 77
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_ENTER 13
#define HIGH 15
#define WIDTH 50

void main(){
int graphdriver=DETECT;
int graphmode,x,y,size;
float i,j,x1,x2,y1,y2,n=0,m=0;
char c,c1;
char s[2][10]={"File","Edit"};
char s1[][10]={"New","Load","Quit"};
char s2[][10]={"Copy","Paste","Find"};
int mcount=2;
void* buff=NULL;

detectgraph( &graphdriver, &graphmode);
print("%d %d\n",graphdriver,graphmode);
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
cleardevice();


setviewport(0,0,300,250,1);
setcolor(WHITE);
rectangle(0,0,250,200);
setfillstyle(1,BLUE);
floodfill(1,1,WHITE);
setfillstyle(1,LIGHTGRAY);
bar(1,1,249,16);
setcolor(YELLOW);
settextstyle(0,0,1);
for(i=0;i<mcount;i++)
outtextxy(10+i*WIDTH,3,s[i]);
for(;;){
c=getch();
switch(c){
case ALT_X:
if(buff!=NULL)free(buff);
closegraph();
exit(0);

case ALT_F:
if(buff!=NULL){
putimage(0,0,buff,COPY_PUT);
free(buff);
}
buff=imagebuff(10,1,100,100);
submenu(100,3,1,s1);
m=1;
n=1;
break;
case ALT_E:
if(buff!=NULL){
putimage(0,0,buff,COPY_PUT);
free(buff);
}
buff=imagebuff(10+WIDTH,1,100,100);
submenu(100,3,1,s2);
m=1;
n=2;
break;
case KEY_ESC:
if(buff!=NULL){
putimage(0,0,buff,COPY_PUT);
free(buff);
}
m=0;
n=0;
break;
case KEY_LEFT:
case KEY_RIGHT:
if(0==n)break;
putimage(0,0,buff,COPY_PUT);
free(buff);
if(1==n){
buff=imagebuff(10+WIDTH,1,100,100);
submenu(100,3,1,s2);
m=1;
n=2;
}
else{
buff=imagebuff(10,1,100,100);
submenu(100,3,1,s1);
m=1;
n=1;
}
break;
case KEY_UP:
if(0==m ¦ ¦m<=1)break;
m--;
if(1==n)
submenu(100,3,m,s1);
else
submenu(100,3,m,s2);
break;
case KEY_DOWN:
if(0==m ¦ ¦m>=3)break;
m++;
if(1==n)submenu(100,3,m,s1);
else submenu(100,3,m,s2);
break;
case KEY_ENTER:
if(0==m)break;
putimage(0,0,buff,COPY_PUT);
free(buff);
buff=imagebuff(5,20,240,175);
switch(m){
case 1:
if(1==n)
outtextxy(50,50,"File-->New");
else
outtextxy(50,50,"Edit-->Copy");
break;
case 2:
if(1==n)
outtextxy(50,50,"File-->Load");
else
outtextxy(50,50,"Edit-->Paste");
break;
case 3:
if(1==n){
free(buff);
closegraph();
exit(0);}
else
outtextxy(50,50,"Edit-->Find");
break;}

m=0;
n=0;
break;
}

}
closegraph();
}


void submenu(int w,int n,int m,char s[][10]){
int i,mw,mh;
mw=w;
mh=n*HIGH+20;
setfillstyle(1,LIGHTGRAY);
bar(0,15,w,mh);
rectangle(5,16,mw-5,mh-5);
for(i=0;i<n;i++)
outtextxy(8,i*15+18,s[i]);
setfillstyle(1,DARKGRAY);
bar(7,(m-1)*15+18,mw-7,m*15+17);
outtextxy(8,(m-1)*15+20,s[m-1]);
}


void *imagebuff(int x1,int x2,int w,int h){
void *buff;
int size;
setviewport(x1,y1,x1+w,y1+h,1);
size=imagesize(0,0,w,h);
buff=malloc(size);
getimage(0,0,w,h,buff);
return buff;
}
...全文
1088 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingkongxiaoyang 2007-05-28
  • 打赏
  • 举报
回复
其实我对C图形编程懂得很少,同学要我帮忙,可是忙了好久还是没有成效.
她的后续代码是由C来实现的,用到了C的图形库,所以她想要一个图形菜单界面,主要来选择后续模块.
本来想用MFC来实现,可是那样是不是所有的代码都要修改啊?而且我对MFC也不是很熟.
我真的不知道要怎么办了?总是行不通.
celftj 2007-05-26
  • 打赏
  • 举报
回复
用SDK,WinMain不?
celftj 2007-05-26
  • 打赏
  • 举报
回复
太长,看不懂...

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧