📄 ncurlib.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 + -