/*********************************************/
/* 程序功能:响应鼠标事件的二级菜单(下拉式)*/
/* 环境:VC6.0+EasyX */
/* 作者:nightchen */
/* 日期:2015-04-13 */
/*********************************************/
#include <graphics.h>
#include <conio.h>
#include <time.h>
#define W 80 //菜单项矩形宽度
#define H 30 //菜单项矩形高度
#define OX 130 //菜单左上角起始点x坐标
#define OY 80 //菜单左上角起始点y坐标
#pragma comment(lib, "winmm.lib") //背景音乐所需
void init();//界面初始化
void cd_main();//画主菜单
void cd1();//画子菜单1
void cd2();//画子菜单2
void cd3();//画子菜单2
void cd1_clear();//清除子菜单1
void cd2_clear();//清除子菜单2
void cd3_clear();//清除子菜单3
void loca_mouse();//获取鼠标所在菜单标号
int t1_x=OX,t2_x=OX+W+5,t3_x=OX+2*(W+5),t4_x=OX+3*(W+5),t5_x=OX+4*(W+5);
//主菜单四个菜单项左边x坐标,菜单项间距为5个象素
int isSub1=0;//子菜单1是否已下拉
int isSub2=0;//子菜单2是否已下拉
int isSub3=0;//子菜单3是否已下拉
int ml;//鼠标所在菜单标号
MOUSEMSG m;
void main()
{
init();
cd_main();
IMAGE bj;
loadimage(&bj, "./fire/bj.jpg",1920,1020);
putimage (0,0,&bj);
PlaySound("zpxj.WAV", NULL,SND_ASYNC); //背景音乐
while(true)
{
loca_mouse(); //获取鼠标所在的菜单编号
switch(ml)
{
case 0:
{cd_main();cd1_clear();cd2_clear();cd3_clear();
break;}
case 1:
{cd_main();
if(isSub1==1) cd1();
cd2_clear();
cd3_clear();
setfillcolor(RGB(180,180,180));
bar(t1_x,OY,t1_x+W,OY+H);
setcolor(BLUE);
outtextxy(t1_x+20,OY+8,"开 始");
if(m.uMsg==WM_LBUTTONDOWN)
cd1();
break;}
case 2:
{cd_main();
if(isSub2==1) cd2();
cd1_clear();
cd3_clear();
setfillcolor(RGB(180,180,180));
bar(t2_x,OY,t2_x+W,OY+H);
setcolor(BLUE);
outtextxy(t2_x+20,OY+8,"程 序");
if(m.uMsg==WM_LBUTTONDOWN)
cd2();
break;}
case 3:
{cd_main();
if(isSub3==1) cd3();
cd1_clear();
cd2_clear();
setfillcolor(RGB(180,180,180));
bar(t3_x,OY,t3_x+W,OY+H);
setcolor(BLUE);
outtextxy(t3_x+20,OY+8,"帮 助");
if(m.uMsg==WM_LBUTTONDOWN)
cd3();
break;}
case 4:
{cd_main();
cd1_clear();
cd2_clear();
cd3_clear();
setfillcolor(RGB(180,180,180));
bar(t4_x,OY,t4_x+W,OY+H);
setcolor(BLUE);
outtextxy(t4_x+20,OY+8,"其 他");
if(m.uMsg==WM_LBUTTONDOWN);
break;}
case 5:
{cd_main();
cd1_clear();
cd2_clear();
cd3_clear();
setfillcolor(RGB(180,180,180));
bar(t5_x,OY,t5_x+W,OY+H);
setcolor(BLUE);
outtextxy(t4_x+20,OY+8,"拓 展");
if(m.uMsg==WM_LBUTTONDOWN);
break;}
case 11:
if(isSub1==1)
{
cd_main(); cd1();
setfillcolor(RGB(180,180,180));
bar(t1_x,OY+5+H,t1_x+W,OY+5+2*H);
setcolor(BLUE);
outtextxy(t1_x+20,OY+5+H+8,"欢 迎");
if(m.uMsg==WM_LBUTTONUP)
{cd_main();cd1_clear();cd2_clear();cd3_clear();
system("下拉菜单.doc");
}
}
break;
case 12:
if(isSub1==1)
{
cd_main(); cd1();
setfillcolor(RGB(180,180,180));
bar(t1_x,OY+5+2*H,t1_x+W,OY+5+3*H);
setcolor(BLUE);
outtextxy(t1_x+20,OY+5+2*H+8,"退 出");
if(m.uMsg==WM_LBUTTONUP)
exit(0);
}
break;
case 13:
if(isSub1==1)
{
cd_main(); cd1();
setfillcolor(RGB(180,180,180));
bar(t1_x,OY+5+3*H,t1_x+W,OY+5+4*H);
setcolor(BLUE);
outtextxy(t1_x+20,OY+5+3*H+8,"");
if(m.uMsg==WM_LBUTTONUP)
system(NULL);
}
break;
case 21:
if(isSub2==1)
{
cd_main(); cd2();
setfillcolor(RGB(180,180,180));
bar(t2_x,OY+5+H,t2_x+W,OY+5+2*H);
setcolor(BLUE);
outtextxy(t2_x+20,OY+5+H+8,"name1");
if(m.uMsg==WM_LBUTTONUP)
system("wt.txt");
}
break;
case 22:
if(isSub2==1)
{
cd_main(); cd2();
setfillcolor(RGB(180,180,180));
bar(t2_x,OY+5+2*H,t2_x+W,OY+5+3*H);
setcolor(BLUE);
outtextxy(t2_x+20,OY+5+2*H+8,"name2");
if(m.uMsg==WM_LBUTTONUP)
system("ty.txt");
}
break;
case 23:
if(isSub2==1)
{
cd_main(); cd2();
setfillcolor(RGB(180,180,180));
bar(t2_x,OY+5+3*H,t2_x+W,OY+5+4*H);
setcolor(BLUE);
outtextxy(t2_x+20,OY+5+3*H+8,"name3");
if(m.uMsg==WM_LBUTTONUP)
system("syy.txt");
}
break;
case 24:
if(isSub2==1)
{
cd_main(); cd2();
setfillcolor(RGB(180,180,180));
bar(t2_x,OY+5+4*H,t2_x+W,OY+5+5*H);
setcolor(BLUE);
outtextxy(t2_x+20,OY+5+4*H+8,"name4");
if(m.uMsg==WM_LBUTTONUP)
system("main.exe");
}
break;
case 31:
if(isSub3==1)
{
cd_main(); cd3();
setfillcolor(RGB(180,180,180));
bar(t3_x,OY+5+H,t3_x+W,OY+5+2*H);
setcolor(BLUE);
outtextxy(t3_x+20,OY+5+H+8,"关 于");
if(m.uMsg==WM_LBUTTONUP)
system(NULL);
}
break;
case 32:
if(isSub3==1)
{
cd_main(); cd3();
setfillcolor(RGB(180,180,180));
bar(t3_x,OY+5+2*H,t3_x+W,OY+5+3*H);
setcolor(BLUE);
outtextxy(t3_x,OY+5+2*H+8,"");
if(m.uMsg==WM_LBUTTONUP)
system(NULL);
}
break;
case 33:
if(isSub3==1)
{
cd_main(); cd3();
setfillcolor(RGB(180,180,180));
bar(t3_x,OY+5+3*H,t3_x+W,OY+5+4*H);
setcolor(BLUE);
outtextxy(t3_x,OY+5+3*H+8,"");
if(m.uMsg==WM_LBUTTONUP)
system(NULL);
}
break;
}
}
closegraph();
}
void init()
{
initgraph(600,400);
setbkcolor(RGB(240,240,240));
setbkmode(TRANSPARENT);
cleardevice();//以背景色清屏
setfillstyle(BS_SOLID);
}
void cd_main()//画主菜单,四项
{
setfillcolor(RGB(240,240,240));
setcolor(RGB(180,180,180));
rectangle(OX-5,OY-5,OX+W*4+20,OY+H+5);
fillrectangle(t1_x,OY,t1_x+W,OY+H);
fillrectangle(t2_x,OY,t2_x+W,OY+H);
fillrectangle(t3_x,OY,t3_x+W,OY+H);
fillrectangle(t4_x,OY,t4_x+W,OY+H);
fillrectangle(t5_x,OY,t5_x+W,OY+H);
setcolor(BLUE);
outtextxy(t1_x+20,OY+8,"开 始");
outtextxy(t2_x+20,OY+8,"程 序");
outtextxy(t3_x+20,OY+8,"帮 助");
outtextxy(t4_x+20,OY+8,"其 他");
outtextxy(t5_x+20,OY+8,"拓 展");
}
void cd1()//画子菜单1,三个菜单项
{
setcolor(RGB(180,180,180));
setfillcolor(RGB(240,240,240));
fillrectangle(t1_x,OY+5+H,t1_x+W,OY+5+2*H);
fillrectangle(t1_x,OY+5+2*H,t1_x+W,OY+5+3*H);
fillrectangle(t1_x,OY+5+3*H,t1_x+W,OY+5+4*H);
setcolor(BLUE);
outtextxy(t1_x+20,OY+5+H+8,"欢 迎");
outtextxy(t1_x+20,OY+5+2*H+8,"退 出");
outtextxy(t1_x+20,OY+5+3*H+8,"");
isSub1=1;
}
void cd1_clear()//清除子菜单1
{
setfillcolor(RGB(240,240,240));
bar(t1_x,OY+5+H,t1_x+W,OY+5+4*H);
setcolor(RGB(180,180,180));
rectangle(OX-5,OY-5,OX+W*4+20,OY+H+5);//清除子菜单后,补画主菜单边框
isSub1=0;
}
void cd2()//画子菜单2
{
setcolor(RGB(180,180,180));
setfillcolor(RGB(240,240,240));
fillrectangle(t2_x,OY+5+H,t2_x+W,OY+5+2*H);
fillrectangle(t2_x,OY+5+2*H,t2_x+W,OY+5+3*H);
fillrectangle(t2_x,OY+5+3*H,t2_x+W,OY+5+4*H);
fillrectangle(t2_x,OY+5+4*H,t2_x+W,OY+5+5*H);
setcolor(BLUE);
outtextxy(t2_x+20,OY+5+H+8,"name1");
outtextxy(t2_x+20,OY+5+2*H+8,"name2");
outtextxy(t2_x+20,OY+5+3*H+8,"namen3");
outtextxy(t2_x+20,OY+5+4*H+8,"name4");
isSub2=1;
}
void cd2_clear()//清除子菜单2
{
setfillcolor(RGB(240,240,240));
bar(t2_x,OY+5+H,t2_x+W,OY+5+5*H);
setcolor(RGB(180,180,180));
rectangle(OX-5,OY-5,OX+W*5+20,OY+H+5);
isSub2=0;
}
void cd3()//画子菜单3
{
setfillcolor(RGB(240,240,240));
setcolor(RGB(180,180,180));
fillrectangle(t3_x,OY+5+H,t3_x+W,OY+5+2*H);
fillrectangle(t3_x,OY+5+2*H,t3_x+W,OY+5+3*H);
fillrectangle(t3_x,OY+5+3*H,t3_x+W,OY+5+4*H);
setcolor(BLUE);
outtextxy(t3_x+20,OY+5+H+8,"关 于");
outtextxy(t3_x+20,OY+5+2*H+8,"");
outtextxy(t3_x+20,OY+5+3*H+8,"");
isSub3=1;
}
void cd3_clear()//清除子菜单3
{
setfillcolor(RGB(240,240,240));
bar(t3_x,OY+5+H,t3_x+W,OY+5+4*H);
setcolor(RGB(180,180,180));
rectangle(OX-5,OY-5,OX+W*4+20,OY+H+5);
isSub3=0;
}
void loca_mouse()// 获取鼠标所在菜单标号,主菜单编号为1、2、3、4,子菜单编号为11、12、13、21、22、23、31、32、33
{
m=GetMouseMsg();
if(m.x>=t1_x&&m.x<=t1_x+W)
{
if(m.y>=OY&&m.y<=OY+H)
ml=1;
else if(m.y>=OY+5+H&&m.y<=OY+5+2*H)
ml=11;
else if(m.y>=OY+5+2*H&&m.y<=OY+5+3*H)
ml=12;
else if(m.y>=OY+5+3*H&&m.y<=OY+5+4*H)
ml=13;
}
else if(m.x>=t2_x&&m.x<=t2_x+W)
{
if(m.y>=OY&&m.y<=OY+H)
ml=2;
else if(m.y>=OY+5+H&&m.y<=OY+5+2*H)
ml=21;
else if(m.y>=OY+5+2*H&&m.y<=OY+5+3*H)
ml=22;
else if(m.y>=OY+5+3*H&&m.y<=OY+5+4*H)
ml=23;
else if(m.y>=OY+5+4*H&&m.y<=OY+5+5*H)
ml=24;
}
else if(m.x>=t3_x&&m.x<=t3_x+W)
{
if(m.y>=OY&&m.y<=OY+H)
ml=3;
else if(m.y>=OY+5+H&&m.y<=OY+5+2*H)
ml=31;
else if(m.y>=OY+5+2*H&&m.y<=OY+5+3*H)
ml=32;
else if(m.y>=OY+5+3*H&&m.y<=OY+5+4*H)
ml=33;
}
else if(m.x>=t4_x&&m.x<=t4_x+W&&m.y>=OY&&m.y<=OY+H)
{
if(m.y>=OY&&m.y<=OY+H)
ml=4;
else if(m.y>=OY+5+H&&m.y<=OY+5+2*H)
ml=41;
else if(m.y>=OY+5+2*H&&m.y<=OY+5+3*H)
ml=42;
else if(m.y>=OY+5+3*H&&m.y<=OY+5+4*H)
ml=43;
}
else if(m.x>=t5_x&&m.x<=t5_x+W&&m.y>=OY&&m.y<=OY+H)
{
if(m.y>=OY&&m.y<=OY+H)
ml=5;
}
else
ml=0;
}