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

📄 curlib.c

📁 用C语言实现的字符型的菜单界面
💻 C
📖 第 1 页 / 共 5 页
字号:
	disp_sysbox(strbuf);}/*----------------------------------------------------------------------------* * Function: 显示一个消息窗口. * Argument: *           short sy - 消息框的开始行. *           short sx - 消息框的开始列. *           char *msg - 消息文本. *           char *title - 标题文本. *           chtype flag  - MSG_OK, MSG_OC, MSG_YN, MSG_YNC, MSG_RC, MSG_ARI. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/disp_box(uchar sy,uchar sx,char *msg,char *title,chtype flag){	message_box(sy,sx,msg,title,flag,screen.wstyle,screen.text,screen.board,screen.select,screen.title);	return(TRUE);}/*----------------------------------------------------------------------------* * Function: 显示一个消息框(stdscr). * Argument: *           short sy - 消息框的开始行. *           short sx - 消息框的开始列. *           char *msg - 消息文本. *           char *title - 标题文本. *           chtype flag  - MSG_OK, MSG_OC, MSG_YN, MSG_YNC, MSG_RC, MSG_ARI. *           chtype style - 窗口风格: WINDOW_SHADE, WINDOW_CHINESE. *           chtype tattr - 正文颜色. *           chtype battr - 边框颜色. *           chtype sattr - 选项颜色. *           chtype hattr - 标题颜色. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/int message_box(uchar sy,uchar sx,char *msg,char *heading,chtype flag,chtype style,chtype tattr,chtype battr,chtype sattr,chtype hattr){	int item_num,lines,i,ret,len,loop,tlen,tx;	uchar ch;	uchar row,col;	WINDOW *txtwin;	window_t *win;	msgcmd_t *ptr,*newptr,*headptr;	col = 10;	row = get_item_num(msg,'\n');	if( row == 0 )	{		if( strlen(msg) > col )			col = strlen(msg);		row = 1;	}	else	{		for(i=0;i<row;i++)		{			if( strlen(get_item(msg,'\n',i)) > col )				col = strlen(get_item(msg,'\n',i));		}	}	col++;	if( style & WINDOW_CHINESE )	{		if( col % 2 != 0 )			col++;	}	if( col > 74 )		col = 74;	tlen = strlen(heading);	if( tlen > col )		tlen = col;		if( (win = create_window(sy,sx,(uchar)(row+2),col,tattr,battr,style)) == NULL )	{		return -1;	}	show_window(win);	attron(battr);	wdraw_line(stdscr,win->sy+row+1,win->sx,win->col,style);	attroff(battr);	/* Display title */	if( *heading != 0 )	{		tx = (win->col-tlen)/2;		if( (tx % 2) != 0 )			tx--;		else			tx-=2;		aprint(win->sy,win->sx+tx,hattr,heading);	}	if( style & WINDOW_CHINESE )	{		if( (txtwin=subwin(stdscr,row,col,win->sy+1,win->sx+2)) == NULL )		{			return -1;		}	}	else	{		if( (txtwin=subwin(stdscr,row,col,win->sy+1,win->sx+1)) == NULL )		{			return -1;		}	}	/* Display message text */	wcls(txtwin,tattr);	mvwaddstr(txtwin,0,0,msg);	touchwin(txtwin);	wrefresh(txtwin);	if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )	{		return -1;	}	memset(newptr,'\0',sizeof(msgcmd_t));	headptr = newptr;	switch(flag)	{	case MSG_OC:		newptr->id = ID_OK;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[确认]");			newptr->coord = col/2-6;		}		else		{			strcpy(newptr->text,"[OK]");			newptr->coord = col/2-4;		}		if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )		{			return -1;		}		memset(newptr,'\0',sizeof(msgcmd_t));		newptr->id = ID_CANCEL;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[取消]");			newptr->coord = col/2+2;		}		else		{			strcpy(newptr->text,"[CANCEL]");			newptr->coord = col/2+2;		}		newptr->next = headptr;		newptr->prev = headptr;		headptr->next = newptr;		headptr->prev = newptr;		item_num = 2;		break;	case MSG_YN:		newptr->id = ID_OK;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[是]");			newptr->coord = col/2-4;		}		else		{			strcpy(newptr->text,"[YES]");			newptr->coord = col/2-4;		}		if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )		{			return -1;		}		memset(newptr,'\0',sizeof(msgcmd_t));		newptr->id = ID_CANCEL;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[否]");			newptr->coord = col/2+2;		}		else		{			strcpy(newptr->text,"[NO]");			newptr->coord = col/2+2;		}		newptr->next = headptr;		newptr->prev = headptr;		headptr->next = newptr;		headptr->prev = newptr;		item_num = 2;		break;	case MSG_RC:		newptr->id = ID_RETRY;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[重试]");			newptr->coord = col/2-6;		}		else		{			strcpy(newptr->text,"[RETRY]");			newptr->coord = col/2-4;		}		if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )		{			return -1;		}		memset(newptr,'\0',sizeof(msgcmd_t));		newptr->id = ID_CANCEL;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[取消]");			newptr->coord = col/2+2;		}		else		{			strcpy(newptr->text,"[CANCEL]");			newptr->coord = col/2+2;		}		newptr->next = headptr;		newptr->prev = headptr;		headptr->next = newptr;		headptr->prev = newptr;		item_num = 2;		break;	case MSG_YNC:		newptr->id = ID_YES;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[是]");			newptr->coord = col/2-8;		}		else		{			strcpy(newptr->text,"[YES]");			newptr->coord = col/2-10;		}		ptr=newptr;		if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )		{			return -1;		}		memset(newptr,'\0',sizeof(msgcmd_t));		newptr->id = ID_NO;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[否]");			newptr->coord = col/2-1;		}		else		{			strcpy(newptr->text,"[NO]");			newptr->coord = col/2-1;		}		ptr->next = newptr;		newptr->prev = ptr;		ptr=newptr;		if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )		{			return -1;		}		memset(newptr,'\0',sizeof(msgcmd_t));		newptr->id = ID_CANCEL;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[取消]");			newptr->coord = col/2+6;		}		else		{			strcpy(newptr->text,"[CANCEL]");			newptr->coord = col/2+7;		}		ptr->next = newptr;		newptr->prev = ptr;		newptr->next = headptr;		headptr->prev = newptr;		item_num = 3;		break;	case MSG_ARI:		newptr->id = ID_ABORT;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[放弃]");			newptr->coord = col/2-11;		}		else		{			strcpy(newptr->text,"[ABORT]");			newptr->coord = col/2-11;		}		ptr=newptr;		if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )		{			return -1;		}		memset(newptr,'\0',sizeof(msgcmd_t));		newptr->id = ID_RETRY;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[重试]");			newptr->coord = col/2-2;		}		else		{			strcpy(newptr->text,"[RETRY]");			newptr->coord = col/2-2;		}		ptr->next = newptr;		newptr->prev = ptr;		ptr=newptr;		if( (newptr=(msgcmd_t *)malloc(sizeof(msgcmd_t))) == NULL )		{			return -1;		}		memset(newptr,'\0',sizeof(msgcmd_t));		newptr->id = ID_IGNORE;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[忽略]");			newptr->coord = col/2+7;		}		else		{			strcpy(newptr->text,"[IGNORE]");			newptr->coord = col/2+7;		}		ptr->next = newptr;		newptr->prev = ptr;		newptr->next = headptr;		headptr->prev = newptr;		item_num = 3;		break;	case MSG_OK:		newptr->id = ID_OK;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[确认]");			newptr->coord = col/2-2;		}		else		{			strcpy(newptr->text,"[OK]");			newptr->coord = col/2;		}		newptr->next = newptr;		newptr->prev = newptr;		item_num = 1;		break;	case MSG_AK:	default:		newptr->id = ID_ANYKEY;		if( screen.wstyle & WINDOW_CHINESE )		{			strcpy(newptr->text,"[按任意键]");			newptr->coord = col/2-4;		}		else		{			strcpy(newptr->text,"[ANY KEY]");			newptr->coord = col/2-4;		}		newptr->next = newptr;		newptr->prev = newptr;		item_num = 1;		break;	}	/* Display item */	if( style & WINDOW_CHINESE )	{		cls_line(win->sy+row+2,win->sx+2,col,battr);	}	else	{		cls_line(win->sy+row+2,win->sx+1,col,battr);	}	ptr=headptr;	do {		mvwaddstr(stdscr,win->sy+row+2,win->sx+ptr->coord,ptr->text);		ptr=ptr->next;	} while( ptr != headptr);	touchwin(stdscr);	wrefresh(stdscr);	ptr=headptr;	//if( (flag == MSG_AK) || (flag == 0) || (item_num == 1) )	if( (flag == MSG_AK) || (flag == 0) )	{		aprint(win->sy+row+2,win->sx+ptr->coord,sattr,ptr->text);		get_char();		ret = ptr->id;	}	else	{		loop=TRUE;		while(loop)		{			aprint(win->sy+row+2,win->sx+ptr->coord,sattr,ptr->text);			switch(get_funckey(&ch))			{			case KeyEnter:				ret=ptr->id;				loop=FALSE;				break;			case KeyDown:			case KeyRight:				aprint(win->sy+row+2,win->sx+ptr->coord,tattr,ptr->text);				ptr=ptr->next;				break;			case KeyUp:			case KeyLeft:				aprint(win->sy+row+2,win->sx+ptr->coord,tattr,ptr->text);				ptr=ptr->prev;				break;			default:				beep();			} /* end of switch */		} /* end of while */	}	delwin(txtwin);	delete_window(win);	touchwin(stdscr);	wrefresh(stdscr);	if( headptr->next != NULL )		free(headptr->next);	if( headptr->prev != NULL )		free(headptr->next);	if( headptr != NULL )		free(headptr);	return ret;}/*----------------------------------------------------------------------------* * Function: 显示一个消息窗口(使用WINDOW). * Argument: *           short sy - 消息框的开始行. *           short sx - 消息框的开始列. *           char *msg - 消息文本. *           char *heading - 标题文本. *           chtype flag  - MSG_OK, MSG_OC, MSG_YN, MSG_YNC, MSG_RC, MSG_ARI. *           chtype style - 窗口风格: WINDOW_SHADE, WINDOW_CHINESE. *           chtype tattr - 正文颜色. *           chtype battr - 边框颜色. *           chtype sattr - 选项颜色. *           chtype hattr - 标题颜色. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/int message_win(short sy,short sx,char *msg,char *heading,chtype flag,chtype style,chtype tattr,chtype battr,chtype sattr,chtype hattr){	int item_num,lines,i,ret,len,loop,tlen,tx;	uchar ch;	short wrow,wcol,trow,tcol;	WINDOW *win,*txtwin;	msgcmd_t *ptr,*newptr,*headptr;	len = 20;	lines = get_item_num(msg,'\n');	if( lines == 0 )	{		if( strlen(msg) > len )			len = strlen(msg);		lines = 1;	}	else	{		for(i=0;i<lines;i++)		{			if( strlen(get_item(msg,'\n',i)) > len )				len = strlen(get_item(msg,'\n',i));		}	}	if( (len % 2) != 0 )		len++;	else		len+=2;	if( len > 74 )		len = 74;	if( style & WINDOW_SHADE )	{		wrow = 5+lines;		wcol = 6+len;		trow = lines;		tcol = wcol - 6;	}	else	{		wrow = 4+lines;		wcol = 4+len;		trow = lines;		tcol = wcol - 4;	}	tlen = strlen(heading);	if( tlen > tcol )		tlen = tcol;		if( (win = newwin(wrow,wcol,sy,sx)) == NULL )	{		return -1;	}	wdraw_box(win,tattr,battr,style);	wattron(win,battr);

⌨️ 快捷键说明

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