永发信息网

C语言编辑菜单模块的问题,跪求!

答案:2  悬赏:0  手机版
解决时间 2021-06-05 11:26
  • 提问者网友:我是女神我骄傲
  • 2021-06-04 22:44

main中的循环(变量都已定义)
while(1)
{
mouse_act(&mx,&my,&button); //鼠标操作

menupush(mx,my, button,&filesign,&editsign,&viewsign,&helpsign,file_buf,edit_buf,view_buf,help_buf,a1,a2,a3,a4); //下拉菜单

key=menu(mx,my, button,&filesign,&editsign,&viewsign,&helpsign); //取得操作键值

menumanage(data,com_total,line_total2, line1,line2,key,flag,&r,&undosign) ; //菜单管理函数
}

函数:
void menupush(int mx,int my,int button ,int *filesign,int *editsign,int *viewsign,int *helpsign,void *file_buf, void *edit_buf,void *view_buf,void *help_buf,int a1[4],int a2[4],int a3[4],int a4[4] )
{

int key;
if(mouse_on(mx,my,a1)) //显示高亮
{
hlight1(a1);
if(button==1&&(*filesign==0))
{
hlight2(a1);
hide_mouse();

menupush1();
show_mouse();
*filesign=1;

}

}

if((mouse_on(mx,my,a1)==0))
{
if(button==1) //打开下拉菜单
{

hide_mouse();
putimage(5,40,file_buf,COPY_PUT);
filesign=0;
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(5,22,40,38);
show_mouse();
setwritemode(1);
}
else if((button==0)&&(*filesign==0)) //取消高亮
{
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(5,22,40,38);
show_mouse();
setwritemode(1);

}
}

if(mouse_on(mx,my,a2)) //高亮显示编辑按键,打开编辑下拉菜单
{
hlight1(a2);
if(button==1&&(*editsign==0))
{
hlight2(a2);
hide_mouse();

menupush2();
show_mouse();
*editsign=1;

}

}
if((mouse_on(mx,my,a2)==0))
{
if(button==1) //收回下拉菜单
{

hide_mouse();
putimage(135,40,edit_buf,COPY_PUT);
*editsign=0;
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(135,22,170,38);
show_mouse();
setwritemode(1);
}
else if((button==0)&&(*editsign==0)) //取消编辑按键的高亮显示
{
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(135,22,170,38);
show_mouse();
setwritemode(1);

}
}


if(mouse_on(mx,my,a3)) //高亮显示视图按键,打开视图的下拉菜单
{
hlight1(a3);
if(button==1&&(*viewsign==0))
{
hlight2(a3);
hide_mouse();

menupush3();
show_mouse();
*viewsign=1;

}

}

if((mouse_on(mx,my,a3)==0))
{
if(button==1) //收回视图的下拉菜单
{

hide_mouse();
putimage(265,40,view_buf,COPY_PUT);
*viewsign=0;
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(265,22,300,38);
show_mouse();
setwritemode(1);
}
else if((button==0)&&(*viewsign==0)) //取消视图按键的高亮显示
{
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(265,22,300,38);
show_mouse();
setwritemode(1);

}
}

if(mouse_on(mx,my,a4)) //高亮显示帮助按键,打开下拉菜单
{
hlight1(a4);
if(button==1&&(*helpsign==0))
{
hlight2(a4);
hide_mouse();

menupush4();
show_mouse();
*helpsign=1;

}

}

if((mouse_on(mx,my,a4)==0)) //收回帮助的菜单
{
if(button==1)
{

hide_mouse();
putimage(395,40,help_buf,COPY_PUT);
*helpsign=0;
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(395,22,430,38);
show_mouse();
setwritemode(1);
}
else if((button==0)&&(*helpsign==0))
{
setcolor(LIGHTGRAY);
setwritemode(0);
rectangle(395,22,430,38);
show_mouse();
setwritemode(1);

}
}
}
int menu(int mx,int my,int button ,int *filesign,int *editsign,int *viewsign,int *helpsign)
{
int key;

if(*filesign==1) //取得文件操作的键值
{
if(mx<60&&mx>5&&(button==1))
{
if(my>40&&my<60)
return ALT_N;
if(my>60&&my<80)
return ALT_O;
if(my>80&&my<100)
return ALT_S;
if(my>100&&my<120)
return ALT_X;
}
}
if(*editsign==1&&(button==1)) //选择编辑菜单下的功能
{
if(mx>135&&mx<190)
{
if(my>40&&my<60)
return F1;
if(my>60&&my<80)
return F2;
//if(my>80&&my<100)
// return Ctrl_S;
}
}

if(*helpsign==1) //取得帮助的功能键值
{
if(mx>395&&mx<450&&(button==1))
{
if(my>40&&my<60)
return F3;
if(my>60&&my<80)
return F4;
}
}
}

void menumanage(struct DATA data[MAX],int *com_total,int *line_total2,int line1[50][2],int line2[50][2],int key,int flag[MAX],int *r,int undosign)
{

if(key==ALT_N)
{

new_file(data,com_total,line_total2,line1,line2) ;

}
if(key==ALT_S)
{
save_file(data,com_total,line_total2,line1, line2);

}
if(key==ALT_O)
{
load_file(data,com_total, line_total2,line1, line2);
}
if(key==ALT_X)
{
cleardevice();
exit(0);

}
}

这是我编的软件里的一部分程序,实现菜单下拉和菜单中项目的选择。但是,下拉菜单正常,点击其中的的选项却实现不了功能(功能函数正常,直接对key赋值可以正常出来,怀疑是menu中参数的问题),错误一直找不到,请教高手,非常感谢!!

最佳答案
  • 五星知识达人网友:醉吻情书
  • 2021-06-05 00:12
看你的程序,好像a1,a2,a3,a4表示选择的菜单项,不知道为何还要使用menu再次判断选择了哪个菜单项。我觉得menupush这个函数应该是显示菜单并处理鼠标在菜单上的操作,这个函数返回时就知道了选择哪个菜单项,可以把选择的菜单项作为这个函数的返回值,而不必再调用menu。
全部回答
  • 1楼网友:十年萤火照君眠
  • 2021-06-05 01:21

key=menu(mx,my, button,&filesign,&editsign,&viewsign,&helpsign); //取得操作键值

看看Key这个值是否正确?

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯