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

📄 work826.c

📁 curses界面编程
💻 C
字号:
/*函数说明:界面*/
/*运行环境:redhat7.1*/
/*编译要求:包含头文件curses.h*/
/*Datech AnWin*/
/*2004-08-23*/
/******************************************************
*8-23	实现基本菜单功能
*8-24	实现inputbox、messagebox、ok_cancel
*8-25	解决输入问题(inputs())
	晚:每个菜单项对应一个函数
*8.26   解决了菜单刷新问题:     
	touchwin(stdscr);
        refresh();
*
*****************************************************/
#include <curses.h>
#include <stdlib.h>
#include <string.h>

#define ENTER 10
#define ESC 27
#define WHI_BLU 1
#define BLU_WHI 2
#define RED_WHI 3
#define BLK_BLU 4
#define YEL_BLU 5

#define OK 3
#define CANCEL 4
#define OK_CANCEL 5

#define MENU_OK_ONLY 1000
#define MENU_OK_CANCEL 1001
#define MENU_INPUT 1002
#define MENU_SAVE_AS 1003
#define MENU_QUIT 1004
#define MENU_ABOUT 2000
#define MENU_HELP 2001
#define MENU_VERSION 2002

#define MENU_WIDTH 15 /*menu width*/
#define INPUT_SIZE 30 /*Max input string size*/
#define MNCANCEL 5000

char *menu1[]={"OK_ONLY","OK_CANCEL","INPUT","SAVE_AS","QUIT"};
char *menu2[]={"ABOUT","HELP","VERSION"};
///////////////////////////////////////////head file/////////////////

//////////////////////////////////////////function//////////////////
/****************************
*function void init_curses()
*功能:初始化curses 关闭辉回显及光标,设置颜色类型

****************************/
void init_curses()
{
initscr();
start_color();/**初始化颜色**/
init_pair(WHI_BLU,COLOR_WHITE,COLOR_BLUE);/**set前景色和背景色model**/
init_pair(BLU_WHI,COLOR_BLUE,COLOR_WHITE);
init_pair(RED_WHI,COLOR_RED,COLOR_WHITE);
init_pair(BLK_BLU,COLOR_BLACK,COLOR_BLUE);
init_pair(YEL_BLU,COLOR_YELLOW,COLOR_BLUE);
curs_set(0);/***设置光标不可见**/
noecho();/**关闭回显**/
keypad(stdscr,TRUE);/**使用curses.h所定义的特殊键必须将keypad设定为TRUE**/
}
/******************************
*function void draw_menubar(WINDOW *menubar)
*功能:画出一级菜单及屏幕边框
******************************/
void draw_menubar(WINDOW *menubar)
{
wbkgd(menubar,COLOR_PAIR(BLU_WHI));

/*设置窗口或者屏幕的背景字符和属性*/
/*COLOR OF MAIN WINDOW font:BLUE,bak:WHITE*/
/**COLOR_PAIR的属性将和窗口中所有非空格的字符的属性进行OR操作**/
/**COLOR_PAIR为init_pair(1,COLOR_WHITE,COLOR_BLUE)定义的属性**/

/***move(1,0);
hline(ACS_HLINE,80);**/  /**draw horizion line TOP**/
move(24,0);
hline(ACS_HLINE,80);/**draw horizion line BOTTOM**/
move(0,0);
vline(ACS_VLINE,25);/**LEFT vertiral line**/
move(0,79);
vline(ACS_VLINE,25);/**RIGHT v LINE**/
wmove(menubar,0,1);
waddstr(menubar,"MENU_TEST");
wattron(menubar,COLOR_PAIR(RED_WHI));/*COLOR::front:RED  bak:WHITE */
waddstr(menubar,"(F1)");
wattroff(menubar,COLOR_PAIR(RED_WHI));/**close FONT**/
wmove(menubar,0,20);
waddstr(menubar,"MENU_HELP");
wattron(menubar,COLOR_PAIR(RED_WHI));
waddstr(menubar,"(F2)");
wattroff(menubar,COLOR_PAIR(RED_WHI));
}

/********************************
*function 
WINDOW **draw_menu(int start_col,char **menu,int itemCount,int width)
**功能:画出二级下拉菜单
**返回:菜单指针
**参数说明:
*int start_col:菜单显示的水平位置x
*char **menu:菜单项的名字
*int itemCount:菜单项的数目
*int width:菜单宽度,由宏 MENU_WIDTH控制
********************************/

WINDOW **draw_menu(int start_col,char **menu,int itemCount,int width)
{
int i;
WINDOW **items;
items=(WINDOW **)malloc((itemCount+1)*sizeof(WINDOW *));/*menu+box=count+1*/
items[0]=newwin(itemCount+2,width+2,1,start_col);
wbkgd(items[0],COLOR_PAIR(BLU_WHI));
box(items[0],ACS_VLINE,ACS_HLINE);
for(i=1;i<=itemCount;i++)
items[i]=subwin(items[0],1,width,i+1,start_col+1);
for (i=0;i<itemCount;i++)
  wprintw(items[i+1],"%s",menu[i]);
wbkgd(items[1],COLOR_PAIR(WHI_BLU));/**childItem:front:WHITE,bak:BLUE**/
wrefresh(items[0]);
return items;
}

/*********************************
function void delete_menu(WINDOW **items,int count)
*功能:删除菜单(二级),释放内存

⌨️ 快捷键说明

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