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

📄 gmenucn.c

📁 中文图形自适应菜单
💻 C
字号:
/*DOS环境下,Turbo C2.0*/
/*已调试无错,可套用*/
#include<bios.h>
#include<alloc.h>
#include<stdio.h>
#include<conio.h>
#include<fcntl.h>
#include<graphics.h>

#define UP 		72
#define DOWN 		80
#define LEFT 		75
#define RIGHT 		77
#define ESC 		27
#define F1 		59
#define ENTER 		13
#define ALT_X 		45
#define SPACE 		32

#define MAX_FRAME 	5
#define Word  		unsigned int
#define Byte  		unsigned char

void 	Main_Frame(),pull_menu(),dis_menu();
void 	help();
void 	keybuffer();
int 	out16hz(),HzConvert();
int 	handle;
void 	*buffer;
void 	*branch_buf;

struct menu_frame
{
	int startx,starty;
	int count;
	char *content[5];
	void *p;
}frame[MAX_FRAME]=
	{
		{109,34,5,{"输入文件","选择文件","文件输出","文件转换","删除文件"},},
		{215,34,4,{"工作目录","界面","文件格式","默认设置"},},
		{321,34,4,{"整本冲","部分冲","单纬","前后造"},},
		{427,34,5,{"一隔一","反一隔一","二隔二","空走","满孔"},},
		{533,34,2,{"退出","放弃"},},
	};

char *menu0[]={"提示帮助","文件操作","机器设置","选择任务","机器调试","退出系统"};
char *bottom[]={"帮助","移动光条","选择","返回","退出"};



int _key;
int select;
int flag16;


void WelcomeU()
{
	int maxx, maxy;
	char pattern[8] = {0x00,0x70,0x10,0x2e,0x72,0x04,0x0e,0x00};
	
	maxx = getmaxx();
   	maxy = getmaxy();
   	
   	setbkcolor(1);
   	setfillpattern(pattern, getmaxcolor()-1);
   	bar(0, 0, maxx, maxy);
	sleep(3);
}

void InitGraph()
{
	int Driver=DETECT,Mode;
	int errorcode;

	registerbgidriver(EGAVGA_driver);
	initgraph(&Driver,&Mode,"c:\\turbo");

	errorcode=graphresult();
	if(errorcode!=grOk)
	{
		printf("Graphics error:%s\n",grapherrormsg(errorcode));
		printf("Press any key to halt:");
		getch();
		closegraph();
		exit(0);
	}
	WelcomeU();
	cleardevice();
}


void LoadMainFrame()
{
	register int i;
	int x;
	
	setbkcolor(7);
	
	rectangle(0,0,639,33);
	rectangle(0,35,639,425);
	line(0,36,639,36);
	/*setcolor(2);
	rectangle(100,100,540,280);*/

	flag16=open("c:\\turbo\\hzk16",O_RDWR|O_BINARY);
	if(flag16==-1)
	{
		printf("Cannot Open HZK16\n");
		exit(1);
	}
	x=2;
	for(i=0;i<=5;i++)
		x=out16hz(36+x,8,0,9,menu0[i]);

	close(handle);			
}

void dispstatusbar()
{
	int leftarrow[12]={126,432,120,438,120,438,126,444,120,438,136,438},
	   rightarrow[12]={140,438,156,438,156,438,150,432,156,438,150,444};

	settextstyle(3,0,1);
	outtextxy(20,427,"F1:");
	out16hz(48,429,0,12,bottom[0]);
	out16hz(204,429,3,12,bottom[1]);

	drawpoly(6,leftarrow);
	drawpoly(6,rightarrow);

	outtextxy(195,427,":");
	outtextxy(320,427,"Enter:");
	out16hz(375,429,0,12,bottom[2]);

	outtextxy(440,427,"Esc:");
	out16hz(480,429,0,12,bottom[3]);

	outtextxy(530,427,"ALT_X:");
	out16hz(590,429,0,12,bottom[4]);

	close(handle);
}

/* 主菜单管理,显示下拉菜单,执行子菜单 */
void FGoodBye();

void Main_Frame()
																													 {
	register int i;
	int size;
	int curx=3,menu_num;

	size=imagesize(3,2,105,30);

	if(size!=-1)
	{
		buffer=malloc(size);
		if(buffer)
			getimage(3,2,105,30,buffer);
			
		putimage(3,2,buffer,NOT_PUT);
	}
	else
		outtext("Out of memory!");
	while((select=specialkey())!=ALT_X)
		switch(select)
		{
			case F1:
				help();
				break;
			case LEFT:
			case RIGHT:
				putimage(curx,2,buffer,COPY_PUT);
				if(select==LEFT)
					curx=curx<=3?3+106*5:curx-106;
				else
					curx=curx>=3+106*5?3:curx+106;
				getimage(curx,2,curx+102,30,buffer);
				putimage(curx,2,buffer,NOT_PUT);
				break;
			case ENTER:
			case DOWN:
				select=0;
				menu_num=(curx-3)/106;
				pull_menu(menu_num);
		}
		free(buffer);
}

void pull_menu(int oldnum)
{
	switch(oldnum)
	{
		case 0:
			help();
			break;
		default :
			dis_menu(oldnum);
	}
}

void dis_menu(int num)
{
	register int i;
	int x0,y0,xx,size;
	int cury,c_num;
	int key,key1;

	x0=frame[num-1].startx;    
	y0=frame[num-1].starty;
	rectangle(x0,y0+1,x0+4*24+4,34+frame[num-1].count*18+10);
	key=0;
	for(i=0;i<frame[num-1].count||i<1;i++)
	switch(num)
	{
		case 5:
			out16hz(x0+20,y0+5+i*18,32,12,frame[num-1].content[i]);
			xx=10;
			break;
		case 4:
			out16hz(x0+10,y0+5+i*18,0,12,frame[num-1].content[i]);
			xx=5;
			break;
		default :
			out16hz(x0+20,y0+5+i*18,0,12,frame[num-1].content[i]);
			xx=5;
	}
	size=imagesize(x0+xx,y0+4,x0+4*24-xx,y0+4+18);
	if(size!=-1)
	{
		frame[num-1].p=malloc(size);
		if(frame[num-1].p)
		getimage(x0+xx,y0+4,x0+4*24-xx,y0+4+18,frame[num-1].p);
		putimage(x0+xx,y0+4,frame[num-1].p,NOT_PUT);
	}
	else
		printf("Out of memory!");
	cury=y0+4;
	do
	{
		key1=specialkey();
		switch(key1)
		{
			case F1:
				help();
				break;

			case ESC:
				size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
				if(size!=-1)
				{
					branch_buf=malloc(size);
					if(branch_buf)
						getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
				}
				else
					outtext("Out of memory!");
				putimage(x0,y0+3,branch_buf,XOR_PUT);
				free(frame[num-1].p);
				free(branch_buf);
				key=1;
				break;

			case ALT_X:
				free(frame[num-1].p);
				key=1;
				keybuffer(0,45);
				break;

			case UP:
			case DOWN:
				putimage(x0+xx,cury,frame[num-1].p,COPY_PUT);
				if(key1==UP)
					cury=cury<=y0+4?y0+4+(frame[num-1].count-1)*18:cury-18;
				else
					cury=cury>=y0+4+(frame[num-1].count-1)*18?y0+4:cury+18;
				getimage(x0+xx,cury,x0+4*24-xx,cury+18,frame[num-1].p);
				putimage(x0+xx,cury,frame[num-1].p,NOT_PUT);
				break;

			case LEFT:
				size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
				if(size!=-1)
				{
					branch_buf=malloc(size);
					if(branch_buf)
						getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
				}
				else
					outtext("Out of memory!");
				putimage(x0,y0+3,branch_buf,XOR_PUT);
				free(frame[num-1].p);
				free(branch_buf);
				key=1;
				keybuffer(0,75);
				if(num!=1)
					keybuffer(0,13);
				break;

			case RIGHT:

				size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
				if(size!=-1)
				{
					branch_buf=malloc(size);
					if(branch_buf)
						getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
				}
				else
					outtext("Out of memory!");

				putimage(x0,y0+3,branch_buf,XOR_PUT);
				free(frame[num-1].p);
				free(branch_buf);
				key=1;
				keybuffer(0,77);
				if(num<5)
					keybuffer(0,13);
				break;

			case ENTER:		/*--	_________________________________	--*/

				c_num=(cury-(y0+4))/18;
				switch(num)
				{
					case 1:/* file */
						switch(c_num)
						{
							
						case 0:
							outtextxy(100,110,"111");
							/*FImport();*/
							break;
						case 1:
							outtextxy(100,130,"122");
							/*FSelect();*/
							break;
						case 2:
							outtextxy(100,150,"133");
							/*FExport();*/
							break;
						case 3:
							outtextxy(100,170,"144");
							/*FConvert();*/
							break;
						case 4:
							outtextxy(100,190,"155");
							/*FDelete();*/
							break;
						}
						break;

					case 2:/* config */
						switch(c_num)
						{

						case 0:
							outtextxy(130,110,"211");
							/*CDirection();*/
							break;
						case 1:
							outtextxy(130,110,"222");
							/*CGUI();*/
							break;
						case 2:
							outtextxy(130,110,"233");
							/*CFFormat();*/
							break;
						case 3:
							outtextxy(130,110,"244");
							/*CDefault();*/
							break;
						}
						break;

					case 3:/*punch */
						switch(c_num)
						{

						case 0:
							outtextxy(160,110,"311");
							/*PTotal();*/
							if((_key=='y')||(_key=='Y'))
								closegraph();
						case 1:
							outtextxy(100,130,"322");
							/*PPart();*/
							break;
						case 2:
							outtextxy(100,150,"333");
							/*PSinWeft();*/
							break;
						case 3:
							outtextxy(100,170,"344");
							/*PHalf();*/
							break;
						}
						break;

					case 4:/*test */
						switch(c_num)
						{
						case 0:
							outtextxy(190,110,"411");
							/*TAlter();*/
							break;
						case 1:
							outtextxy(100,130,"422");
							/*TAlterR();*/
							break;
						case 2:
							outtextxy(100,150,"433");
							/*TAlterBy2();*/
							break;
						case 3:
							outtextxy(100,170,"444");
							/*TNone();*/
							break;
						case 4:
							outtextxy(100,190,"455");
							/*TFull();*/
							break;
						}
						break;

					case 5:/*quit */
						switch(c_num)
						{

						case 0:
							FGoodBye();
							sleep(1);

							free(frame[num-1].p);
							key=1;
							keybuffer(0,45);

							break;
						case 1:
							outtextxy(220,110,"522");

							size=imagesize(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10);
							if(size!=-1)
							{
								branch_buf=malloc(size);
								if(branch_buf)
									getimage(x0,y0+3,x0+4*24+4,34+frame[num-1].count*18+10,branch_buf);
							}
							else
								outtext("Out of memory!");

							putimage(x0,y0+3,branch_buf,XOR_PUT);
							free(frame[num-1].p);
							free(branch_buf);
							key=1;
						}
				}
		}
	}while(key==0);
}

main()
{
	InitGraph();
	LoadMainFrame();
	dispstatusbar();
	Main_Frame();

	closegraph();
	close(flag16);
}


void help()
{
	setviewport(90,90,549,320,1);
	outtextxy(222,0,"help");
	settextstyle(0,0,0);
	while(specialkey()!=ESC)
	;
	clearviewport();
	setviewport(0,0,639,345,1);
}

void FGoodBye()
{
	outtextxy(220,110,"Goodbye!");
}



int specialkey()
{
	int key;
	while(bioskey(1)==0)
	;			/* 等待按键 */
	key=bioskey(0);
	key=key&0xff ? key&0xff:key>>8;
	return(key);
}

void keybuffer(char k1,char k2)
{
	int keybufbott;
	keybufbott=peek(0,0x041c);
	if(keybufbott<0x03c)
		pokeb(0,0x041c,keybufbott+2);
	else
		pokeb(0,0x041c,0x01e);
	pokeb(0,0x0400+keybufbott,k1);
	pokeb(0,0x0400+keybufbott+1,k2);
}


int out16hz(int x,int y,int z,int color,char *p)
{
	Word i,QM,WM,flag=0;
	int record,i1,i2,i3;
	long pointer;
	char Bit[32];
	
	while ((i=*p++)!=0)
	{
		if (flag==0)
		{
			QM=(i-0xA1)&0x07F;
			flag=1;
		}
		else
		{
			WM=(i-0xA1)&0x07F;
			flag=0;
			record=QM*94+WM;
			pointer=record*32L;
			lseek(flag16,pointer,SEEK_SET);
			read(flag16,Bit,32);
			for(i1=0;i1<16;i1++)
				for(i2=0;i2<2;i2++)
					for(i3=0;i3<8;i3++)
						if(HzConvert(Bit[i1*2+i2],7-i3))
				  			putpixel(x+i2*8+i3,y+i1,color);
			x=x+z+16;
		}
	}
	return(x);
}

int HzConvert(Byte ch,int n)
{
	return ((ch>>n)&1);
}

/*文件操作*/



/*long DriFreeB(unsigned int drive)
{

}

int getbit(Byte ch,int n)
{
	return((ch>>n)&0x01);
}
void dishz(int x,int y,int z,int color,char *p)
{
	Byte num ,QM,WM,flag=0;
	int record,i,j,k;
	long pointer;
	char Bit[32];
	chdir("c:\\turbo");
	flag16=open("hzk16",O_RDWR|O_BINARY);
	if(flag16==-1)
	{
		printf("Cannot Open HZK16\n");
		closegraph();
		exit(1);
	}
        while ((num=*p++)!=0)
	{
		if (num>0xA1)
		if (flag==0)
		{
		        QM=(num-0xA1)&0x07F;
		        flag=1;
		}
		else
		{
			WM=(num-0xA1)&0x07F;
			flag=0;
			record=QM*94+WM;
			pointer=record*32L;
			lseek(flag16,pointer,SEEK_SET);
			read(flag16,Bit,32);
			for(i=0;i<16;i++)
			for(j=0;j<2;j++)
			for(k=0;k<8;k++)
			if(getbit(Bit[i*2+j],7-k))
			putpixel(x+j*8+k,y+i,color);
			x=x+z+16;
		}
	}
	close(flag16);
	return ;

}
int specialkey()
{

}

int find1(unsigned int drive, unsigned char fnames[][13])
{

}


void display(int numold,int num,int page,unsigned char fnames[][13])
{

}
int wj_xuanz(char file[13],unsigned int drive)
{

}
int twj_xuanz(char file[13],unsigned int drive)
{

}

/*file find main*/
fchazhao()
{    
}

void FImport()
{

}

void FExport()
{

}

void FDelete()
{

}

/*同步信号接收*/
/*
int SPage()
{  

}

int SColumn()
{

}*/

/*调试功能实现*/
/*
void TAlter()
{
	int data=0x55,tmp,key,i,j;


}

void TAlterR()
{


}

void TFull()
{
}

⌨️ 快捷键说明

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