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

📄 win_util.c

📁 API
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 *
 * 周国祥 2001/05/08 Created
 */
#include	<curses.h>
#include	<setjmp.h>
#include	<signal.h>
/*
 * 清窗口内容
 */
zut_wclear(win)
WINDOW	*win;
{
	int	i, j;

	for (i = 0; i < win->_maxy; i++)
		for (j = 0; j < win->_maxx; j++)
			mvwprintw(win, i, j, " ");
}

/*
 * 清窗口内容的同时在窗口的周边画一方框
 */
zut_win_wboxclear(w, bf)
WINDOW	*w;
bool	bf;
{
	if (bf == TRUE)
		zut_win_draw_hcbox(w, w->_maxy, w->_maxx, 0, 0, TRUE);
	else
		zut_win_draw_cbox(w, w->_maxy, w->_maxx, 0, 0, TRUE);
}

/*
 *	在指定窗口中画一细线方框 
 *	若bf==TRUE, 则清框中内容; 否则, 不清
 */
zut_win_draw_cbox(win, nrow, ncol, row, col, bf)
WINDOW	*win;
int	nrow, ncol, row, col;
bool	bf;
{
	int	i, j;

	if (bf == TRUE)	/* 清窗口 */
		for (i = 0; i < nrow; i++)
			for (j = 0; j < ncol; j++)
				mvwprintw(win, row+i, col+j, " ");
	mvwprintw(win, row, col, "┌");
	for (j = 1; j < ncol/2 - 1; j++)
		mvwprintw(win, row, col+j*2, "─");
	mvwprintw(win, row, col+ncol-2, "┐");

	for (i = 1; i < nrow-1; i++) {
		mvwprintw(win, row+i, col, "│");
		mvwprintw(win, row+i, col+ncol-2, "│");
	}

	mvwprintw(win, row+nrow-1, col, "└");
	for (j = 1; j < ncol/2 - 1; j++)
		mvwprintw(win, row+nrow-1, col+j*2, "─");
	mvwprintw(win, row+nrow-1, col+ncol-2, "┘");
}

/*
 *	在指定窗口中画一粗线方框 
 *	若bf==TRUE, 则清框中内容; 否则, 不清
 */
zut_win_draw_hcbox(win, nrow, ncol, row, col, bf)
WINDOW	*win;
int	nrow, ncol, row, col;
bool	bf;
{
	int	i, j;

	if (bf == TRUE)	/* 清窗口 */
		for (i = 0; i < nrow; i++)
			for (j = 0; j < ncol; j++)
				mvwprintw(win, row+i, col+j, " ");
	mvwprintw(win, row, col, "┏");
	for (j = 1; j < ncol/2 - 1; j++)
		mvwprintw(win, row, col+j*2, "━");
	mvwprintw(win, row, col+ncol-2, "┓");

	for (i = 1; i < nrow-1; i++) {
		mvwprintw(win, row+i, col, "┃");
		mvwprintw(win, row+i, col+ncol-2, "┃");
	}

	mvwprintw(win, row+nrow-1, col, "┗");
	for (j = 1; j < ncol/2 - 1; j++)
		mvwprintw(win, row+nrow-1, col+j*2, "━");
	mvwprintw(win, row+nrow-1, col+ncol-2, "┛");
}

/*
 * 在某窗口的底部一行显示信息
 */
zut_disp_prompt(w, str)
WINDOW	*w;
char	*str;
{
	short	row = w->_maxy - 1;

	zut_win_disp_prompt(w, row, str);
}

/*
 * 在某窗口的底部一行显示信息
 */
zut_disp_prompt1(w, str)
WINDOW	*w;
char	*str;
{
	short	row = w->_maxy - 2;

	if (row < 0)
		row = 0;
	zut_win_disp_prompt(w, row, str);
}

zut_win_disp_prompt(w, row, str)
WINDOW	*w;
int	row;
char	*str;
{
	int	i;
	char	format[20];
	short	lastcol = w->_maxx - 2;

	sprintf(format, "%%%ds", lastcol - 2);

	wattroff(w, A_BOLD);
	for (i = 2; i < lastcol; i++)
		mvwprintw(w, row, i, " ");
	wrefresh(w);
	mvwprintw(w, row, 2, format, " ");
	wrefresh(w);

	for (i = 0; i < (int)strlen(str); i++) {
		if (str[i] == '[') {
			mvwprintw(w, row, 2+i, "%c", str[i]);
			wattron(w, A_BOLD);
			continue;
		}
		if (str[i] == ']') {
			wattroff(w, A_BOLD);
			mvwprintw(w, row, 2+i, "%c", str[i]);
			continue;
		}
		mvwprintw(w, row, 2+i, "%c", str[i]);
	}
/*
	mvwprintw(w, row, 2, "%s", str);
*/
	wrefresh(w);
	wattroff(w, A_BOLD);

}


/*
 * 在某窗口的底部一行显示错误信息
 */
zut_err_prompt(w, str)
WINDOW	*w;
char	*str;
{
	short	row = w->_maxy - 1;

	zut_win_err_prompt(w, row, str);
}

/*
 * 在某窗口的底部一行显示错误信息
 */
zut_err_prompt1(w, str)
WINDOW	*w;
char	*str;
{
	short	row = w->_maxy - 2;

	if (row < 0)
		row = 0;
	zut_win_err_prompt(w, row, str);
}

zut_win_err_prompt(w, row, str)
WINDOW	*w;
int	row;
char	*str;
{
	int	i;
	int	j;
	char	format[20];
	short	lastcol = w->_maxx - 2;

	sprintf(format, "%%-%ds", lastcol - 2);

	beep();
	if (w) {
		touchwin(w);
		mvwprintw(w, row, 2, format, " ");
		wrefresh(w);
		wattron(w, A_REVERSE);
		wattron(w, A_BOLD);
		mvwprintw(w, row, 2, format, str);
		wattroff(w, A_BOLD);
		wattroff(w, A_REVERSE);
		wrefresh(w);

#if 1
		sleep(1);
		wstandend(w);
		mvwprintw(w, row, 2, format, " ");
		wrefresh(w);
		
#else
		wgetch(w);
#endif
	} else if (stdscr) {
		wattron(stdscr, A_REVERSE);
		wattron(stdscr, A_BOLD);
		mvwprintw(stdscr, 22, 5, "%74s", " ");
		mvwprintw(stdscr, 22, 5, "%s", str);
		wattroff(stdscr, A_BOLD);
		wattroff(stdscr, A_REVERSE);
		wrefresh(stdscr);
		sleep(1);
		mvwprintw(stdscr, 22, 5, "%74s", " ");
	} else {
		fprintf(stderr, "%s\n", str);
	}
}

zut_win_popup_help(str)
char	*str;
{
	int	i;
	WINDOW	*help_win;
	int	rows, cols;
	int	srow, scol;
	char	format[20];

	sprintf(format, "%%-%ds", (int)strlen(str));
	rows = 3;
	cols = (int)strlen(str+8);
	srow = LINES - rows - 1;
	scol = (COLS - cols - 2) / 2;
	help_win = newwin(rows, cols+2, srow, scol);
	for (i = 4; i < cols-4; i++)
		mvwprintw(help_win, 1, i, " ");
	wrefresh(help_win);
	mvwprintw(help_win, 1, 4, format, " ");
	wstandout(help_win);
	mvwprintw(help_win, 1, 4, format, str);
	wstandend(help_win);
	wrefresh(help_win);
	wgetch(help_win);
	delwin(help_win);
	return;

}

/*
 * 左对齐显示字串
 */
zut_disp_str(w, x, y, lim, s)
WINDOW	*w;
int	x, y;
int	lim;
char	s[];
{
#if 0
	int	i, j;

	wmove(w, x, y);
	for (i = 0; i < lim; i++) {
		if (s[i] == '\0')
			break;
		wprintw(w, "%c", s[i]);
	}
	for (j = i; j < lim; j++)
		wprintw(w, "%c", ' ');
	wrefresh(w);
#else
	mvwprintw(w, x, y, "%-*s", lim, s);
	wrefresh(w);
#endif
}

/*
 * 右对齐显示字串
 */
zut_disp_str1(w, x, y, lim, s)
WINDOW	*w;
int	x, y;
int	lim;
char	s[];
{
	mvwprintw(w, x, y, "%*s", lim, s);
	wrefresh(w);
}

/*
 *	从 x,y 开始填充 lim 个圆点
 */
zut_fill_dot(w, x, y, lim)
WINDOW	*w;
int	x, y, lim;
{
	int	i;

	for (i = y; i <= y + lim - 1; i++)
		mvwprintw(w, x, i, ".");
}

/*
 *	从 x,y 开始填充 lim 个空格
 */
zut_fill_sp(w, x, y, lim)
WINDOW	*w;
int	x, y, lim;
{
	int	i;

	for (i = y; i <= y + lim - 1; i++)
		mvwprintw(w, x, i, " ");
}

/*
 * 弹出退出窗口, 选择退出
 */
zut_win_exit(str)
char	*str;
{
	int	i, j;
	int	c;
	char	flag = 0;
	WINDOW	*exitw;

	exitw = newwin(5, 30+2, 12, 28);
	keypad(exitw, TRUE);
	zut_win_draw_cbox(exitw, 5, 30, 0, 0);
	mvwprintw(exitw, 1, 4, "退出综合业务处理系统? ");

	wstandend(exitw);
	wattron(exitw,A_BOLD);
	mvwprintw(exitw, 3, 16, "不退");
	wattroff(exitw,A_BOLD);
	wstandout(exitw);
	wattron(exitw,A_BOLD);
	mvwprintw(exitw, 3, 6, "退出");
	wrefresh(exitw);
	wattroff(exitw,A_BOLD);
	wstandend(exitw);
	while (1) {
		c = wgetch(exitw);
		switch(c) {
		case	KEY_LEFT:
		case	KEY_RIGHT:
			if (flag == 1)
				flag = 0;
			else
				flag = 1;
			break;
		case	'\n':
		case	'\r':
			if (flag == 0) {
#ifdef zgx971224del /* move to txmain.c */
				clear();
				refresh();
				endwin();
/*
				ioctl(0, TCSETAW, &stdin_in);
				ioctl(1, TCSETAW, &stdin_out);
*/
				exit(0);
#endif
				return(0);
			} else {
				delwin(exitw);
				return(1);
			}
		default:
			beep();
			continue;
		}
		if (flag == 0) {
			wattron(exitw,A_BOLD);
			mvwprintw(exitw, 3, 16, "不退");
			wattroff(exitw,A_BOLD);
			wstandout(exitw);
			wattron(exitw,A_BOLD);
			mvwprintw(exitw, 3, 6, "退出");
			wattroff(exitw,A_BOLD);
			wstandend(exitw);
		} else {
			wattron(exitw,A_BOLD);
			mvwprintw(exitw, 3, 6, "退出");
			wattroff(exitw,A_BOLD);
			wstandout(exitw);
			wattron(exitw,A_BOLD);
			mvwprintw(exitw, 3, 16, "不退");
			wattroff(exitw,A_BOLD);
			wstandend(exitw);
		}
		wrefresh(exitw);
	}
	
}

#ifdef zgx010508_del
/*
 *	显示屏幕头信息
 *	在一窗口的第0行显示"屏幕状态","操作员","日期"等信息
 *	一般情况下,参数message_win为屏幕顶部之WINDOW
 */
zut_win_disp_message(message_win, scr_state)
WINDOW	*message_win;
char	*scr_state;
{
	int	m, d, y, hh, mm, ss;
	int	i;
	char	format[20];

	for (i = 2; i < COLS-2; i++)
		mvwprintw(message_win, 0, i, " ");
#ifdef zgx980116
	mvwprintw(message_win, 0, 0, "屏幕状态: ");
#else
	mvwprintw(message_win, 0, 0, "屏幕: ");
#endif

#ifdef zgx980204
	wstandout(message_win);
	wattron(message_win, A_BOLD);
#else
	wattron(message_win, A_REVERSE);
#endif
	sprintf(format, "%%%ds", (int)strlen(scr_state));
#ifdef zgx980116
	mvwprintw(message_win, 0, 10, format, scr_state);
#else
	mvwprintw(message_win, 0, 6, format, scr_state);
#endif
#ifdef zgx980204
	wattroff(message_win, A_BOLD);
	wstandend(message_win);
#else
	wattroff(message_win, A_REVERSE);
#endif

	zut_win_disp_opname(message_win, GV_opcode, GV_opname);


#ifdef zgx980116
	mvwprintw(message_win, 0, 58, "日期: ");

	zut_get_ymd(&y, &m, &d);
	mvwprintw(message_win, 0, 64, "%d年%02d月%02d日", y, m, d);
	wrefresh(message_win);
#else
	zut_get_ymdhms(&y, &m, &d, &hh, &mm, &ss);
	mvwprintw(message_win, 0, 50, "%04d年%02d月%02d日  %02d:%02d:%02d", y, m, d, hh, mm, ss);
	wrefresh(message_win);
#endif

}

zut_win_disp_opname(w, opcode, opname)
WINDOW	*w;
short	opcode;
char	*opname;
{
/*
	mvwprintw(w, 0, 38, "操作员: ");
*/
#ifdef zgx980116
	mvwprintw(w, 0, 38, "柜  员: ");
	mvwprintw(w, 0, 46, "%-8s", opname);
	wrefresh(w);
#else
	mvwprintw(w, 0, 30, "柜员: ");
	if (opcode == 0)
		mvwprintw(w, 0, 36, "%4s", " ");
	else
		mvwprintw(w, 0, 36, "%04d", opcode);
	mvwprintw(w, 0, 42, "%-8s", opname);
	wrefresh(w);
#endif
}

/*
 *	显示屏幕头信息
 *	在一窗口的第0行显示"交易信息","操作员"等信息
 *	一般情况下,参数header_win为屏幕顶部之WINDOW
 */
zut_win_disp_tx_header(header_win, tx_code, tx_name)
WINDOW	*header_win;
int	tx_code;
char	*tx_name;
{
	int	m, d, y, hh, mm, ss;
	int	i;
	char	format[20];

⌨️ 快捷键说明

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