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

📄 ncurlib.c

📁 福建博洋教育C/C++软件项目实战:POS收银系统
💻 C
字号:
#include <ncurses.h>
#include <time.h>
#include <ctype.h>
#include "ncurlib.h"
#include "public.h"
/*==============================================
functinon:颜色等初始化
================================================*/
void init_ncurses()
{
	initscr();
	noecho();
	cbreak();
	refresh();
	if (has_colors())
	{
		start_color();
		init_pair(1,COLOR_BLACK,COLOR_WHITE);//1.黑白
		init_pair(2,COLOR_BLACK,COLOR_BLUE);//2.黑蓝
		init_pair(3,COLOR_WHITE,COLOR_RED);//3.白红
		init_pair(4,COLOR_BLACK,COLOR_RED);//4.黑红
		init_pair(5,COLOR_WHITE,COLOR_BLUE);//5.白蓝
		init_pair(6,COLOR_WHITE,COLOR_BLACK);//6.白黑
		init_pair(7,COLOR_BLACK,COLOR_YELLOW);//7.黑黄
		return;
	}
}
/*===============================================================
function:创建窗口
return:返回一个窗口指针
==============================================================*/
WINDOW* create_win(int height,int width,int starty,int startx)
{
	WINDOW *win=newwin(height,width,starty,startx);
	return win;
}
/*============================================================
function:在某个窗口中打印横线
=============================================================*/
void print_line(WINDOW* win,int col)
{
	 mvwaddch(win,col,0,ACS_LTEE);
	 mvwhline(win,col,1,ACS_HLINE,78);
	 mvwaddch(win,col,79,ACS_RTEE);
}
/*===============================================================
function:清除窗口
==============================================================*/
void del_win(WINDOW *win)
{
	wclear(win);	
	delwin(win);
	wrefresh(win);
}
/*====================================================================
function:消息提示
param:按任意键继续的提示框
======================================================================*/
void Message(const char *message,int height,int width)
{
	WINDOW *dialog;
	int start_x,start_y,len;
	len=strlen(message);
	start_x=(80-width)/2;
	start_y=(23-height)/2;
	if (width<len)
	{
		width=len+5;
	}
	dialog=create_win(height,width,start_y,start_x);
	keypad(dialog,TRUE);
	wbkgd(dialog,COLOR_PAIR(4));
	box(dialog,0,0);
	mvwprintw(dialog,height/2,(width-strlen(message))/2,"%s",message);
	mvwprintw(dialog,height-2,15,"按任意键继续...");
	wrefresh(dialog);
	int ch;
	while (1)
	{
		ch = wgetch(dialog);
		switch (ch)
		{
		case KEY_HOME:
		case KEY_END:
		case KEY_PPAGE:
		case KEY_NPAGE:
		case KEY_RIGHT:
		case KEY_LEFT:
		case KEY_UP:
		case KEY_DOWN:
		case KEY_F(1):
		case KEY_F(2):
		case KEY_F(3):
		case KEY_F(4):
		case KEY_F(5):
		case KEY_F(6):
		case KEY_F(7):
		case KEY_F(8):
		case KEY_F(9):
		case KEY_F(10):
		case KEY_F(11):
		case KEY_F(12):
			continue;
		default:
			break;		
		}
		break;
	}
	del_win(dialog);
}
/*============================================================
function:消息提示框
param:消息提示后有确定和返回键来做相应的功能
return:确定返回1,取消返回0
===========================================================*/
int message_botton(const char *message,int height,int width)
{
	WINDOW *dialog[3]={NULL};
	int  len=strlen(message);
	if (width<len)
	{
		width=len+5;
	}
	int start_x=(80-width)/2;
	int start_y=(24-height)/2;
	dialog[0]=create_win(height,width,start_y,start_x);
	box(dialog[0],0,0);
	mvwprintw(dialog[0],0,(width-4)/2,"提示");
	mvwprintw(dialog[0],3,(width-len)/2,message);
	wbkgd(dialog[0],COLOR_PAIR(1));
	wrefresh(dialog[0]);
	int button_x=start_x+4;
	int button_y=start_y+height-4;
	dialog[1]=create_win(3,8,button_y,button_x);	
	mvwprintw(dialog[1],1,2, "确定");
	box(dialog[1],0,0);
	wbkgd(dialog[1],COLOR_PAIR(3));
	keypad(dialog[1],TRUE);
	wrefresh(dialog[1]);
	dialog[2]=create_win(3,8,button_y,button_x+width-20);
	mvwprintw(dialog[2],1,2,"取消");
	box(dialog[2],0,0);
	wbkgd(dialog[2],COLOR_PAIR(3));
	keypad(dialog[2],TRUE);
	wrefresh(dialog[2]);
	int ch;
	ENSURE:	
		wattron(dialog[1],A_REVERSE);
		mvwprintw(dialog[1],1,2, "确定");		
		wrefresh(dialog[1]);	
		while (1)
		{
			ch=wgetch(dialog[1]);
			switch (ch)
			{		
			case KEY_LEFT:
			case KEY_DOWN:
			case KEY_UP:
				break;			
			case KEY_RIGHT:
				wattroff(dialog[1],A_REVERSE);
				mvwprintw(dialog[1],1,2, "确定");
				wrefresh(dialog[1]);	
				goto CANCEL;
			case '\n':	
				return 1;						
			}			
		}
	CANCEL:		
		wattron(dialog[2],A_REVERSE);
		mvwprintw(dialog[2],1,2, "取消");		
		wrefresh(dialog[2]);	
		while (1)
		{
			ch=wgetch(dialog[2]);
			switch (ch)
			{
			case KEY_UP:
			case KEY_DOWN:
			case KEY_RIGHT:
				break;
			case KEY_LEFT:
				wattroff(dialog[2],A_REVERSE);
				mvwprintw(dialog[2],1,2, "取消");
				wrefresh(dialog[2]);
				goto ENSURE;		
			case '\n':
				return 0;	
			}
		}
}
/*============================================================
function:通用确定和返回界面
=============================================================*/
void print_dialog_box(int height,int width,char *titles,int color,WINDOW* dialog[])
{
	int  len=strlen(titles);
	if (width<len)
	{
		width=len+5;
	}
	int start_x=(80-width)/2;
	int start_y=(24-height)/2;
	dialog[0]=create_win(height,width,start_y,start_x);
	box(dialog[0],0,0);
	mvwprintw(dialog[0],0,(width-len)/2,titles);
	wbkgd(dialog[0],COLOR_PAIR(color));
	wrefresh(dialog[0]);
	int button_x=start_x+4;
	int button_y=start_y+height-4;
	dialog[1]=create_win(3,8,button_y,button_x);
	mvwprintw(dialog[1],1,2, "确定");
	box(dialog[1],0,0);
	wbkgd(dialog[1],COLOR_PAIR(3));
	wrefresh(dialog[1]);
	dialog[2]=create_win(3,8,button_y,button_x+width-20);
	mvwprintw(dialog[2],1,2,"取消");
	box(dialog[2],0,0);
	wbkgd(dialog[2],COLOR_PAIR(3));
	wrefresh(dialog[2]);
}

/*==========================================
function:获取系统时间
============================================*/
void get_system_time(WINDOW* win,char *systime)
{
	time_t the_time;
	struct tm *ptr_time;
	time(&the_time);
	ptr_time=localtime(&the_time);
	strftime(systime,sizeof("20080830131211"),"%Y%m%d%H%M%S",ptr_time);	
}


⌨️ 快捷键说明

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