⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3_4.c

📁 浙大《C语言设计基础课程设计》中的例程 有些比较好的代码!
💻 C
字号:
/*------例程3-4-------*/
#include <process.h>
#include <dos.h>
#include <conio.h>
#define Key_DOWN  	0x5100
#define Key_UP    	0x4900
#define Key_ESC     0x011b
#define Key_ALT_F	0x2100
#define Key_ALT_X	0x2d00
#define Key_ENTER  	0x1c0d

void box(int startx,int starty,int high,int width);

main()
{
  int i,key,x,y,l;
  char *menu[] = {"File","Edit","Run","Option","Help","Setup","Zoom","Menu"};
  /*	主菜单各项	*/
  char *red[] = { "F","E","R","O","H","S","Z","M" };		/*	加上红色热键	*/
  char *f[] = {"Load file","Save file","Print","Modify ","Quit  A1t_x"};
  /*	File项的子菜单	*/
  char buf[16*10*2],buf1[16*2]; 		/*	定义保存文本的缓冲区	*/

  while(1)
  {
	textbackground(BLUE);
	clrscr();
	textmode(C80);
	window(1,1,80,1);/*	定义显示主菜单的窗口	*/
	textbackground(LIGHTGRAY);
	textcolor(BLACK);
	clrscr();
	gotoxy(5,1);
	for(i=0,l=0;i<8;i++)
  	{
		x=wherex();				/*	得到当前光标的坐标	*/
		y=wherey();
		cprintf("%s",menu[i]);	/*	显示各菜单项		*/
		l=strlen(menu[i]);			/*	得到菜单项的长度	*/
		gotoxy(x,y);
		textcolor(RED);
		cprintf("%s",red[i]);		/*	在主菜单项各头字符写上红字符	*/
		x=x+l+5;
		gotoxy(x,y);
		textcolor(BLACK);			/*	为显示下一个菜单项移动光标	*/
	}
	gotoxy(5,1);

	key=bioskey(0);			
	switch (key){
	 case Key_ALT_X:
		exit(0);	/*	ALT_X则退出	*/
	 case Key_ALT_F:
		{
		 textbackground(BLACK);
		 textcolor(WHITE);
		 gotoxy(5,1);
		 cprintf("%s",menu[0]);		/*	加黑File项	*/
		 gettext(5,2,20,12,buf);	/*	保存窗口原来的文本	*/
		 window(5,2,20,9);/*	设置作矩形框的窗口	*/
		 textbackground(LIGHTGRAY);
		 textcolor(BLACK);
		 clrscr();
		 box(1,1,7,16);				/*	调用作框函数		*/
		 for(i=2;i<7;i++)				/*	显示子菜单各项		*/
		 {	gotoxy(2,i);
  			cprintf("%s",f[i-2]);
		 }
		 gettext(2,2,18,3,buf1);  /*将下拉菜单的内容保存在buf1*/
		 textbackground(BLACK);
		 textcolor(WHITE);
		 gotoxy(2,2);
		 cprintf("%s",f[0]);/*加黑下拉菜单的第一项load file*/
		 gotoxy(2,2);
		 y=2;

		 while ((key=bioskey(0))!=Key_ALT_X)   /*	等待选择下拉菜单项*/
		 {
		    if ((key==Key_UP)||(key==Key_DOWN))
		    {
			puttext(2,y,18,y+1,buf1); 		/*	恢复原先的项	*/
			if (key==Key_UP)
			    y=y==2?6:y-1;
			else
			    y=y==6?2:y+1;
			gettext(2,y,18,y+1,buf1);	/*保存要压上光条的子菜单项*/
			textbackground(BLACK);
			textcolor(WHITE);
			gotoxy(2,y);
			cprintf("%s",f[y-2]);	/*	产生黑条压在所选项上	*/
			gotoxy(2,y);
		     }
		     else
			if (key==Key_ENTER)/*	若是回车键,判断是哪一子菜单按的回车,在此没有相应的特殊处理*/
			{
			    switch ( y-1 ){
			        case 1:	/*	是子菜单项第一项:Load file	*/
			   		        break;
			        case 2:    /*	Save file	*/
    				                break;
			        case 3:   	/*	print		*/
    				                break;
		  	        case 4:	/*	modify	*/
    				                break;
			        case 5:    exit(0);    				                
			        default:   break;
			     }
		             break;
			}
			else
			    if (key==Key_ESC)	break; /*	是Esc键,返回主菜单		*/
		 }
		 if (key==Key_ALT_X) exit(0);
		 break;
		}
	}
  }
 }

void box(int startx,int starty,int high,int width)	/*	画矩形框函数	*/
{	int i;
	gotoxy(startx,starty);
	putch(0xda);						/*	画┌	*/
	for (i=startx+1;i<width;i++)	putch(0xc4);		/*	画─	*/
	putch(0xbf);						/*	画┐	*/
	for( i=starty+1;i<high;i++)
	{
		gotoxy(startx,i);putch(0xb3);			/*	画│	*/
		gotoxy(width,i);putch(0xb3);			/*	画│	*/
	}
	gotoxy(startx,high);
	putch(0xc0);						/*	画└	*/
	for (i=startx+1;i<width;i++)	putch(0xc4); 		/*	画─	*/
	putch(0xd9);						/*	画┘	*/
	return ;
}
/*------例程3-4结束-------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -