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中参数的问题),错误一直找不到,请教高手,非常感谢!!