| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1000 人关注过本帖
标题:moon
只看楼主 加入收藏
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
 问题点数:0 回复次数:12 
moon

斑竹:您好!麻烦你再帮我看看,怎么回事,程序越来越混乱了呢?下面的程序为什么我单击菜单不能弹出其子菜单呢?
#include<graphics.h>
#include<dos.h>
#include<conio.h>
#include<stdlib.h>
struct menu{
int left,top,right,bottom;
char *head;
};
struct menu File={150,90,200,110,"File"};
struct menu Edit={250,90,300,110,"Edit"};
struct menu Help={350,90,400,110,"Help"};
struct menu Close={620,20,630,30,"x"};
struct menu Title={100,20,540,50};
struct menu Mainmenu={100,70,540,120};
struct menu Text={100,150,540,450};
struct menu Print={50,455,590,475};
union REGS i,o;
int button,x,y;
void show_mouse(void); /*显示鼠标函数*/
void set_fill_screen(void); /*设置整个屏幕函数*/
void process_program(void); /*处理函数*/
void set_title_screen(struct menu *t); /*设置标题窗口*/
void set_mainmenu_screen(struct menu *t); /*设置主要菜单*/
void set_text_screen(struct menu *t); /*设置文本窗口*/
void set_print_screen(struct menu *t); /*设置打印窗口*/
void comment(void); /*注解函数*/
void draw_button(struct menu *t); /*绘制按纽函数*/
int status_mouse(void); /*鼠标状况函数*/
int mouse_on(struct menu *t); /*鼠标放在哪个菜单函数*/
void display_sub_menu(struct menu *t,int n,char *H[]); /*显示下级菜单函数*/
void high_light(struct menu *t); /*高亮显示函数*/
int main(void)
{
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:\\tc"); /*图形初始化*/
show_mouse(); /*显示鼠标*/
set_fill_screen(); /*设置屏幕*/
process_program(); /*处理函数*/
getch();
closegraph();
return 0;
}
void show_mouse(void) /*显示鼠标函数*/
{
i.x.ax=1;
int86(0x33,&i,&o);
}
void set_fill_screen(void) /*设置整个屏幕函数*/
{
setfillstyle(1,3);
bar(0,0,640,480);
clrscr();
}
void process_program(void) /*处理函数*/
{
char KEY;
char *fm[]={"New","Open","Save","Save as","Exit"}; /*文件子菜单*/
char *em[]={"Undo","Cut","Copy","Paste","Delete","Select All"}; /*编辑子菜单*/
char *hm[]={"Help Topics","About Menus"}; /*帮助子菜单*/
set_title_screen(&Title); /*设置标题窗口*/
set_mainmenu_screen(&Mainmenu); /*设置主要菜单*/
set_text_screen(&Text); /*设置文本窗口*/
set_print_screen(&Print); /*设置打印窗口*/
comment(); /*注解*/
draw_button(&File); /*绘制按纽*/
draw_button(&Edit);
draw_button(&Help);
draw_button(&Close);
while(1)
{
if(status_mouse()==1) /*检测鼠标状态*/
{
if(mouse_on(&File))
display_sub_menu(&File,5,fm);
if(mouse_on(&Edit))
display_sub_menu(&Edit,6,em);
if(mouse_on(&Help))
display_sub_menu(&Help,2,hm);
if(mouse_on(&Close))
exit(0);
}
else
{
if(mouse_on(&File))
high_light(&File);
if(mouse_on(&Edit))
high_light(&Edit);
if(mouse_on(&Help))
high_light(&Help);
if(mouse_on(&Close))
high_light(&Close);
}
if(kbhit()) /*检测从键盘输入的字符*/
{
KEY=getch();
if(KEY==27) /*输入ESC退出*/
{
outtextxy(250,350,"Bye::Bye");
sleep(1);
exit(0);
}
}
}/*while*/
}
void set_title_screen(struct menu *t) /*设置标题*/
{
setfillstyle(1,0);
bar(t->left,t->top,t->right,t->bottom);
setcolor(0);
line(t->left,t->top,t->right,t->top);
line(t->left,t->top,t->left,t->bottom);
setcolor(15);
line(t->right,t->top,t->right,t->bottom);
line(t->left,t->bottom,t->right,t->bottom);
}
void set_mainmenu_screen(struct menu *t) /*设置主要菜单*/
{
setcolor(15);
line(t->left,t->top,t->right,t->top);
line(t->left,t->top,t->left,t->bottom);
setcolor(0);
line(t->right,t->top,t->right,t->bottom);
line(t->left,t->bottom,t->right,t->bottom);
}
void set_text_screen(struct menu *t) /*设置文本窗口*/
{
setfillstyle(1,2);
bar(t->left,t->top,t->right,t->bottom);
setcolor(0);
line(t->left,t->top,t->right,t->top);
line(t->left,t->top,t->left,t->bottom);
setcolor(15);
line(t->left,t->bottom,t->right,t->bottom);
line(t->right,t->top,t->right,t->bottom);
}
void set_print_screen(struct menu *t) /*设置输出窗口*/
{
setfillstyle(1,0);
bar(t->left,t->top,t->right,t->bottom);
setcolor(0);
line(t->left,t->top,t->right,t->top);
line(t->left,t->top,t->left,t->bottom);
setcolor(15);
line(t->left,t->bottom,t->right,t->bottom);
line(t->right,t->top,t->right,t->bottom);
}
void comment(void) /*解释函数*/
{
char text_string1[]="This is my first graph menu!";
char text_string2[]="Hello Friend!";
char text_string3[]="Here is an with my menu program.";
char text_string4[]="As you can see it's like windows menu ,you can";
char text_string5[]="add more menus to it.It's just a concept for";
char text_string6[]="build more menus.I hope you will like my effort,";
char text_string7[]="email me at : chentianqiao06@163.com.";
char text_string8[]="__chentianqiao.";
char text_string9[]="2006-03-01.";
setcolor(15);
outtextxy(200,30,text_string1);
outtextxy(150,170,text_string2);
outtextxy(150,190,text_string3);
outtextxy(150,210,text_string4);
outtextxy(150,230,text_string5);
outtextxy(150,250,text_string6);
outtextxy(150,270,text_string7);
outtextxy(390,290,text_string8);
outtextxy(390,310,text_string9);
}
void draw_button(struct menu *t) /*绘制菜单按纽*/
{
setcolor(0);
outtextxy(t->left+2,t->top+2,t->head);
}
int status_mouse(void) /*鼠标状态函数*/
{
i.x.ax=3;
int86(0x33,&i,&o);
button=o.x.bx;
x=o.x.cx;
y=o.x.dx;
return button;
}
int mouse_on(struct menu *t) /*鼠标*/
{
int flag=0;
if(x>=t->left && x<=t->right && y>=t->top && y<=t->bottom)
flag=1;
return flag;
}
void display_sub_menu(struct menu *t,int n,char *H[]) /*显示下级菜单*/
{
int j;
unsigned area;
void *mapbuffer;
area=imagesize(100,120,540,450);
mapbuffer=malloc(area);
getimage(100,120,540,450,mapbuffer);
setfillstyle(1,3);
bar(t->left,t->top+40,t->right+100,t->bottom+200);
setcolor(15);
line(t->left,t->top+40,t->right+100,t->top+40);
line(t->left,t->top+40,t->left,t->bottom+200);
setcolor(0);
line(t->left,t->bottom+200,t->right+100,t->bottom+200);
line(t->right+100,t->top+40,t->right+100,t->bottom+200);
for(j=0;j<n;j++)
{
setcolor(0);
outtextxy(t->left+5,t->top+100+j*20,H[j]);
}
sleep(3);
putimage(100,120,mapbuffer,COPY_PUT);
free(mapbuffer);
}
void high_light(struct menu *t) /*菜单按纽高亮函数*/
{
setcolor(15);
line(t->left,t->top,t->right,t->top);
line(t->left,t->top,t->left,t->bottom);
setcolor(0);
line(t->left,t->bottom,t->right,t->bottom);
line(t->right,t->top,t->right,t->bottom);
while(1) /*detect mouse state*/
{
status_mouse();
if(mouse_on(t)!=1) /*cancel high_light*/
{
setcolor(3);
rectangle(t->left,t->top,t->right,t->bottom);
break;
}
}
我都快晕了。

[此贴子已经被作者于2006-3-6 19:37:36编辑过]

搜索更多相关主题的帖子: moon 
2006-03-01 20:54
moon
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-3-5
收藏
得分:0 

这个程序不错!

比刚才我看的你的几个别的帖子好多了!


ARM+LINUX嵌入式   -月满西楼
2006-03-05 15:44
moon
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-3-5
收藏
得分:0 

劝你基础不好先比写这样的大程序!

呵呵~~~


ARM+LINUX嵌入式   -月满西楼
2006-03-05 15:45
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
得分:0 
谢谢2楼先生批评,小妹会记住先生的教诲,日后更加勤奋苦读,请先生再上线留下QQ。
3年后很想跟先生切磋一下技术。到时怕先生不敢。

2006-03-05 18:41
moon
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-3-5
收藏
得分:0 
........
3年???

太久了 呵呵~

不过没关系! 当然好呀!

我相信 3年以后 你一定能超过我的!

就评你现在学习的尽头~~

不过 学习和编程是一样的
不光看进度 还要看效率!

做高的 当然好! 不过

不能为了速度 放弃效率!
就好象连什么叫算法都没明白? 怎么可能去写一个高效率的程序那~?

学东西要从基础开始!
还有,tc函数库是真的落后了(现在已经被完全淘汰,可以说没有任何市场)
所以 用TC只能做练习 没必要去深入他!

呵呵
我明白你现在的想法!
我刚学的时候也是这样,其实还不如你!
我想写这样东西还写不出来~

呵呵

QQ当然可以给你
44410526
不过我基本不用QQ 现在~
msn:cuibo1224@163.com(可能人满了,不过没关系,你来了我可以删1个 ~~ 呵呵)



这样吧 给你出题~ 如何?

写个函数,求2个整数的和.(就是加法)

ARM+LINUX嵌入式   -月满西楼
2006-03-06 15:36
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
moon的说得很有道理,你一定是在搞开发吧

2006-03-06 15:40
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
得分:0 
以下是引用moon在2006-3-6 15:36:00的发言:
........
3年???

太久了 呵呵~

不过没关系! 当然好呀!

我相信 3年以后 你一定能超过我的!

就评你现在学习的尽头~~

不过 学习和编程是一样的
不光看进度 还要看效率!

做高的 当然好! 不过

不能为了速度 放弃效率!
就好象连什么叫算法都没明白? 怎么可能去写一个高效率的程序那~?

学东西要从基础开始!
还有,tc函数库是真的落后了(现在已经被完全淘汰,可以说没有任何市场)
所以 用TC只能做练习 没必要去深入他!

呵呵
我明白你现在的想法!
我刚学的时候也是这样,其实还不如你!
我想写这样东西还写不出来~

呵呵

QQ当然可以给你
44410526
不过我基本不用QQ 现在~
msn:cuibo1224@163.com(可能人满了,不过没关系,你来了我可以删1个 ~~ 呵呵)



这样吧 给你出题~ 如何?

写个函数,求2个整数的和.(就是加法)

本人现在的学习计划正式正在软件公司工作的哥哥指教的,你的意思是我的哥哥也错了,哥哥总不会骗妹妹吧!
另外你说写个函数,在main()函数中调用一个求加法运算的函数吗,不是吧!
void sum(int *total,int a,int b)
{
*total=a+b;
}

不可能是写这个吧?


2006-03-06 16:09
Lydolphin
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-12-4
收藏
得分:0 

回复moon的求两个整数和:
1.不考虑加数与和的溢出
这个直接定义两个整型,直接相加
2.考虑加数与和的任一个数产生溢出
用字符串模拟加法运算(若为负数,字符串首位为符号位)
不知道这个答案符不符合moon的要求....


PHP:http://www.
ASP:http://www.
HTML:http://www.
2006-03-06 16:25
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
以下是引用Lydolphin在2006-3-6 16:25:00的发言:

回复moon的求两个整数和:
1.不考虑加数与和的溢出
这个直接定义两个整型,直接相加
2.考虑加数与和的任一个数产生溢出
用字符串模拟加法运算(若为负数,字符串首位为符号位)
不知道这个答案符不符合moon的要求....

你把答案漏了


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-06 16:27
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
得分:0 
指针复引用

2006-03-06 16:29
快速回复:moon
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037804 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved