毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

C语言课程设计-菜单设计

更新时间:2007-10-23:  来源:毕业论文
C语言课程设计-菜单设计|c语言程序代码编程小程序设计|c语言课程设计报告课程案例

调试环境为TC2.0或?.0。运行这个程序需要tc提供的几个头文件。建议修改options菜单中的include目录项到tc的include的目录下(具体方法可以参见本书第一章的讲解);或者把源程序拷贝到tc目录下运行。


#include <conio.h>
#include<dos.h>
#include <graphics.h>
#include<stdio.h>
#include<stdlib.h>

/*定义一些常数*/
#define NO 0
#define YES 1
#define NONE -1
#define MAX_MENU 7/*根据情况改变可以在菜单显示的最大项*/

/*全局参数*/
int X,Y;
int Selection;
int button,x,y;
void *p;
size_t area;

/*菜单结构*/
struct MENU
{
      /*左上角*/
      int x; 
      int y;
      /*右下角*/
      int x1;
      int y1;
      unsigned char Active[MAX_MENU];/* 菜单项是否激活的标志*/
      char *head;/* 菜单的名字(可选项)*/
};

int MouseOn(struct MENU *t);
void Process();
void Xorbar(int sx,int sy,int ex,int ey,int c);
void Show();
void Hide();
void Status();

/* 通过下面的参数用户可以改变按钮的位置。*/

struct MENU File={200,110,250,130};
struct MENU Edit={295,110,345,130};
struct MENU Help={390,110,440,130};
struct MENU Close={600,10,620,30};
struct MENU Neeraj={380,300,460,315};

void main()
{
 int gd = DETECT,gm;
 
 /*初始化图形界面*/
 initgraph(&gd, &gm,"");
 Selection=NONE;
 /*是否激活菜单项,YES表示激活;NO表示取消激活*/
 for(gd=0;gd<MAX_MENU;gd++)
 {
 File.Active[gd]=YES;
 Edit.Active[gd]=YES;
 Help.Active[gd]=YES;
 Close.Active[gd]=YES;
 }
 /*菜单项的名字,用户可以修改以显示其他的名称*/
 File.head="[ File Menu ]";
 Edit.head="[ Edit Menu ]";
 Help.head="[ Help Menu ]";
 Close.head="[ Exit ]";
 /*为界面分配内存*/
 area=imagesize(0,0,150,150);
 p=malloc(area);
 
 /*没有足够的内存*/
 if(p==NULL)
 {
 closegraph();
 restorecrtmode();
 printf("Not Enough Memory !\n try to reduce the area used.\n");
 exit(1);
 }
 setfillstyle(1,7);
 bar(0,0,640,480);
 X=2;Y=2;
 /*绘制这个界面*/
 Process();
 End();
 /*关闭图形显示方式*/
 closegraph();
 printf("GUI-MENUS By Neeraj Sharma  -  
n21@indiatimes.com\n");
 getch();
}

void Process()
{
 /*文件菜单项的子菜单项*/
 char *fm[]={"New","Open","Save","Save as","Exit"};
 /*编辑菜单项的子菜单项*/
 char *em[]={"Undo","Cut","Copy","Paste","Delete","Select All"};
 /*帮助菜单项的子菜单项*/
 char *hm[]={"Help Topics","About Menus"};
 
 /* 如果用户在这里改变的了菜单项的值,那么也同样需要改变在函数
    中的PullMenuDown(char *,int)值*/
 char KEY;
 /* 绘制各个菜单 */
 Win(140,100,500,140);
 /* 绘制文件菜单项 */
 DrawBtn(&File,"File");
 /* 绘制编辑菜单项 */
 DrawBtn(&Edit,"Edit");
 /* 绘制帮助菜单项*/
 DrawBtn(&Help,"Help");
 settextstyle(0,0,0);
 outtextxy(Close.x+7,Close.y+7,"x");
 Comments();
 Show();
 /* 正如下面所示用户可以激活和取消激活一个菜单项
    下面的'save as'被取消激活*/
 File.Active[3]=NO;/* Save as*/
 Edit.Active[0]=NO;/* 取消激活*/
 while(1)
 {
  if(kbhit())
  {
   KEY=getch();
   /*如果用户按下"ESC"或者"-"推出程序*/
   if(KEY==27|| KEY==45) break;
  }
  Status();
  /*如果按下鼠标左键*/
  if(button==1)
  {
    /*用户点击Close*/
    if(MouseOn(&Close)) break;
    /*用户点击File*/
    if(MouseOn(&File))
    {
     PullMenuDown(fm,5,&File);/* 菜单项为5*/
     if(Selection==NONE) Msg("No Selection !");
     else Msg(fm[Selection]);
     if(Selection==4) break;
    }
    /*用户点击Edit*/
    if(MouseOn(&Edit))
    {
     PullMenuDown(em,6,&Edit);/* 菜单项为6*/
     if(Selection==NONE) Msg("No Selection !");
     else Msg(em[Selection]);
    }
    /*用户点击Help*/
    if(MouseOn(&Help))
    {
     PullMenuDown(hm,2,&Help);/* 菜单项为2*/
     if(Selection==NONE) Msg("No Selection !");
     else Msg(hm[Selection]);
     if(Selection==1) Msg("* Programming By NEERAJ SHARMA *");
    }
  }
  else
  {
   /*鼠标在那个菜单项上,就高亮显示之*/
   
   /*高亮显示文件菜单项*/
   if(MouseOn(&File)) Hlight(&File);
   /*高亮显示编辑菜单项*/
   if(MouseOn(&Edit)) Hlight(&Edit);
   /*高亮显示帮助菜单项*/
   if(MouseOn(&Help)) Hlight(&Help);
   /*高亮显示关闭菜单项*/
   if(MouseOn(&Close)) Hlight(&Close);
   if(MouseOn(&Neeraj))
   {
    Msg("Hello, everyone");
    while(MouseOn(&Neeraj))
    {
     Status();
     if(button!=0) break;
     if(kbhit()) break;
     }
     Msg("");
   }
  }
 }
 Msg(":: Bye Bye ::");
}

/* 绘制菜单项 */
DrawBtn(struct MENU *tm,char *txt)
{
 /*设置绘制的颜色*/
 setcolor(0);
 /*设置文本格式*/
 settextstyle(2,0,4);
 /*输出txt文本*/
 outtextxy(tm->x+15,tm->y+4,txt);
}
/*高亮显示函数*/
Hlight(struct MENU *t)
{
/* 高亮 */
 winp(t,0);
/* 显示菜单项名称  */
 Msg(t->head);
 /*在没有输入的情况下,一直高亮*/
 while(MouseOn(t))
 {
 Status();
 if(button!=0) break;
 if(kbhit()) break;
 }
 /*消除高亮*/
 setcolor(7);
 Hide();
 rectangle(t->x,t->y,t->x1,t->y1);
 Msg("");
 /*重绘*/
 Show();
}

int MouseOn(struct MENU *t)
{
 int flag;
 flag=0;
 if(x>=t->x && x<=t->x1 && y>=t->y && y<=t->y1) flag=1;
 return flag;
}

void Xorbar(int sx,int sy,int ex,int ey,int c)
{
 int i;
 setwritemode(1);
 setcolor(c);
 Hide();
 for(i=sy;i<=ey;i++)
 line(sx,i,ex,i);
 Show();
 setwritemode(0);
}

Push(struct MENU *tm)
{
 winp(tm,1);
 while(button==1)
 {
  Status();
  if(kbhit()) break;
 }
}

Up(struct MENU *tm)
{
 setcolor(7);
 Hide();
 rectangle(tm->x,tm->y,tm->x1,tm->y1);
 Show();
 while(button==1)
 {
  Status();
  if(kbhit()) break;
 }
}

/*弹出下拉菜单*/
PullMenuDown(char *H[],int n,struct MENU *tm)
{
 int i;
 i=n*20;
 /* 保存背景*/
 Push(tm);
 /* 隐藏鼠标光标*/
 Hide();
 /* 把菜单项位图读入内存,以供收回弹出项时重新绘制*/
 getimage(tm->x+1,tm->y1+2,tm->x+100,tm->y1+i+5,p);
 /* 重新设置这块区域*/
 Win(tm->x+1,tm->y1+2,tm->x+100,tm->y1+i+5);
 setcolor(0);
 settextstyle(2,0,4);
 /*弹出下拉菜单项*/
 for(i=0;i<n;i++)
 {
  if(!tm->Active[i])
  {
   setcolor(15);
   outtextxy(tm->x+15,tm->y1+9+i*20,H[i]);
   setcolor(0);
   outtextxy(tm->x+14,tm->y1+8+i*20,H[i]);
  }
  else    outtextxy(tm->x+14,tm->y1+8+i*20,H[i]);
 }
 /*显示鼠标光标*/
 Show();
 while(button==1)  Status();
 HandleMenu(n,tm);
}

PullMenuUp(int n,struct MENU *tm)
{
 int i;
 /*隐藏鼠标光标*/
 Hide();
 /* 把读入内容的原菜单项位图重新绘制出来*/
 putimage(tm->x+1,tm->y1+2,p,COPY_PUT);
 /*显示鼠标光标*/
 Show();
 Up(tm);
}
/* 处理菜单项命令函数 */
HandleMenu(int n,struct MENU *tm)
{
 int i;
 char Key;
 setcolor(0);
 Selection=NONE;
 i=0;
 while(1)
 {
  Status();
  if(button==1) break;
  for(i=0;i<n;i++)
  {
   Status();
   if(MouseOn1(tm->x+4,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20))
   {
       Xorbar(tm->x+3,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20,14);
       while(MouseOn1(tm->x+4,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20))
       {
    Status();
    if(button==1)
    {
     if(tm->Active[i]==YES)
     {
      Selection=i;

[1] [2] 下一页

C语言课程设计-菜单设计下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。