📄 825.c
字号:
break;
default:
if(count >= INPUT_SIZE-1 )
{
beep();
}
else
{
mvwaddch(inpbox[2],0,x,ch); /* 如果不是特殊字符, 印出*/
count++;
tmpstr[count] = ch;
x++;
}
break;
}
wmove(inpbox[2],0,x); /* 移动光标至现在位置 */
wrefresh(inpbox[2]);
} while (flag==1);
tmpstr[count+1]='\0';
memcpy(str,tmpstr,strlen(tmpstr));
//mvprintw(12,20,"inputs string:tmp:[%s],str:[%s]",tmpstr,str);
}
/*输入框函数inputbox()*/
/*char * topic :标题 char * inputStr:返回的输入信息*/
WINDOW **inpbox(char * topic, char * inputStr)
{
int width,height;
int i,j;
int y, x;/*position of message box*/
WINDOW **inputbox;
width = INPUT_SIZE;
height=2;
x = (80-width)/2;
y = (20-height)/2;
/*
* ______________________________________
*|TOPIC (1)|(0)
*| INPUTBOX:||||||||||||||||| (2) |
*| |
*| [OK](3) [CANCEL] (4) |
*|______________________________________|
*/
inputbox=(WINDOW **)malloc((5)*sizeof(WINDOW *));
/*box+topic+inputbox+OK_CANCEL*/
inputbox[0]=newwin(height+4,width+2,y,x);/**lines,rows,y,x**/
wbkgd(inputbox[0],COLOR_PAIR(BLU_WHI));/**front:BLUE,bak:WHITE**/
box(inputbox[0],ACS_VLINE,ACS_HLINE);/**draw box**/
inputbox[1]=subwin(inputbox[0],1,width,y+1,x+1);
inputbox[2]=subwin(inputbox[0],1,width,y+2,x+1);
wbkgd(inputbox[2],COLOR_PAIR(WHI_BLU));
wprintw(inputbox[1],"%s",topic);
inputbox[3]=subwin(inputbox[0],1,6,y+4,x+3);
wprintw(inputbox[3]," [OK] ");/*length=1,so +1 :)*/
inputbox[4]=subwin(inputbox[0],1,10,y+4,x+width-10);
wprintw(inputbox[4]," [CANCEL] ");
wrefresh(inputbox[0]);
inputs(inputbox,1,1,inputStr);
return inputbox;
}
/*msgrtn()*/
/*消息框返回值:OK or CANCEL*/
int inpboxrtn(WINDOW **inputbox)
{
int key;
int selected=3;
while (1) {
key=getch();
if (key==KEY_LEFT || key==KEY_RIGHT)
{ /******[OK]***********[CANCEL]**/
wbkgd(inputbox[selected],COLOR_PAIR(BLU_WHI));
wnoutrefresh(inputbox[selected]);
if (key==KEY_LEFT)
{
selected=OK;
}
else
{
selected=CANCEL;
}
wbkgd(inputbox[selected],COLOR_PAIR(WHI_BLU));
wnoutrefresh(inputbox[selected]);
doupdate();
}/**KEY_LEFT/RIGHT**/
else if (key==ESC)
{
return CANCEL;
}
else if (key==ENTER)
{
return selected;
}
else if (key=='\t')/*TAB KEY*/
{
wbkgd(inputbox[selected],COLOR_PAIR(BLU_WHI));
wnoutrefresh(inputbox[selected]);
selected = (selected == CANCEL) ? OK : CANCEL;
wbkgd(inputbox[selected],COLOR_PAIR(WHI_BLU));
wnoutrefresh(inputbox[selected]);
doupdate();
}
}/**while(1)**/
}
//////////////////////MENU Function//////////////////////
//MENU_OK_ONLY
void MNokonly()
{
int tmpkey;
WINDOW **msgbox;
msgbox = messagebox("OKONLY","OK_ONLY MENU",OK);
tmpkey=getch();
del_box(msgbox);
}
//MENU_OK_CANCEL
void MNokcancel()
{
int selected_msg;
WINDOW **msgbox;
WINDOW *messagebar;
messagebar=subwin(stdscr,1,79,23,1);
werase(messagebar);
wrefresh(messagebar);
msgbox = messagebox("OK_CANCEL","OK_CANCEL MENU",OK_CANCEL);
selected_msg = msgrtn(msgbox);
del_box(msgbox);
if(selected_msg == OK)
wprintw(messagebar,"CHOOSE [OK]!");
else if(selected_msg == CANCEL)
wprintw(messagebar,"CHOOSE [CANCEL]!");
delwin(messagebar);
}
//MENU_INPUT
//topic:input_box's topic
void MNinput(char *topic)
{
int selected_msg;
char *inputStr;
WINDOW **inputbox;
WINDOW *messagebar;
messagebar=subwin(stdscr,1,79,23,1);
werase(messagebar);
wrefresh(messagebar);
inputStr = malloc(INPUT_SIZE*sizeof(char));
memset(inputStr,'\0',INPUT_SIZE);
if(strlen(topic)==0) topic = "Datech AnWin";
inputbox = inpbox(topic,inputStr);
//inputs(inputbox,inputStr);
selected_msg = inpboxrtn(inputbox);
//beep();
//mvprintw(16,20,"selected_msg:[%d],string:[%s]",selected_msg,inputStr);
del_box(inputbox);
curs_set(0);/***设置光标不可见**/
//noecho();/**关回显**/
if(selected_msg == OK)
wprintw(messagebar,"Input string is::[%s]",inputStr);
else if(selected_msg == CANCEL)
wprintw(messagebar,"User CANCELED!");
free(inputStr);
delwin(messagebar);
}
//MENU_SAVE_AS
void MNsaveas()
{
MNinput("Input File Name::");
}
//MENU_QUIT 1004
int MNquit()
{
int selected_msg;
WINDOW **msgbox;
WINDOW *messagebar;
messagebar=subwin(stdscr,1,79,23,1);
werase(messagebar);
wrefresh(messagebar);
msgbox = messagebox("QUIT"," Are You Sure To Quit?",OK_CANCEL);
selected_msg = msgrtn(msgbox);
del_box(msgbox);
if(selected_msg == OK)
{
return 27;//return 27(ESC),if k==27 program quit
}
else if(selected_msg == CANCEL)
{
wprintw(messagebar,"User CANCELED!");
delwin(messagebar);
return MNCANCEL;
}
}
//MENU_ABOUT 2000
void MNabout()
{
int tmpkey;
WINDOW **msgbox;
msgbox = messagebox("ABOUT","DaTech(C)AnWin 2004-08-23",OK);
tmpkey=getch();
del_box(msgbox);
}
//MENU_HELP 2001
void MNhelp()
{
int tmpkey;
WINDOW **msgbox;
msgbox = messagebox("HELP","Use F1~FX and UP/DOWN/LEFT/RIGHT key choose menu",OK);
tmpkey=getch();
del_box(msgbox);
}
//MENU_VERSION 2002
void MNversion()
{
int tmpkey;
WINDOW **msgbox;
msgbox = messagebox("VERSION","DaTech(C)AnWin Version 1.0",OK);
/*only OK button*/
tmpkey=getch();
del_box(msgbox);
}
int main()
{
int key,tmpkey;
int menuNo,itemNo;
WINDOW *menubar,*messagebar;
init_curses();
bkgd(COLOR_PAIR(WHI_BLU));
menubar=subwin(stdscr,1,80,0,0);
messagebar=subwin(stdscr,1,79,23,1);
draw_menubar(menubar);
/************************************************/
move(2,1);
printw("Press F1 or F2 to open the menus. ");
printw("ESC quits.");
refresh();
do
{
int selected_item,selected_msg;
WINDOW **menu_items;
key=getch();
werase(messagebar);
wrefresh(messagebar);
if (key==KEY_F(1))
{
menu_items=draw_menu(1,menu1,5,MENU_WIDTH);
/*WINDOW **draw_menu(int start_col,char **menu,int count,int width)*/
/**接口:start_col开始的列,**menu内容,count:菜单数目,width菜单宽度**/
selected_item=scroll_menu(menu_items,5,1);
delete_menu(menu_items,6);
}
else if (key==KEY_F(2))
{
menu_items=draw_menu(20,menu2,3,MENU_WIDTH);
selected_item=scroll_menu(menu_items,3,20);
delete_menu(menu_items,4);
}
if (selected_item<0)
wprintw(messagebar,"You haven't selected any child item");
else
{//doupdate();
switch(selected_item)
{
/********************************
*#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
****************************/
case 1000://
case MENU_OK_ONLY:
MNokonly();
selected_item = 0;
break;
case 1001://
case MENU_OK_CANCEL:
MNokcancel();
selected_item = 0;
break;
case 1002://
case MENU_INPUT:
MNinput("Topic_Input");
selected_item = 0;
break;
case 1003://
case MENU_SAVE_AS:
MNsaveas();
selected_item = 0;
break;
case MENU_QUIT:
key = MNquit();
selected_item = 0;
break;
case MENU_ABOUT://2000
MNabout();
selected_item = 0;
break;
case MENU_HELP://2001
MNhelp();
selected_item = 0;
break;
case MENU_VERSION://2002
MNversion();
selected_item = 0;
break;
default:beep();
/* wprintw(messagebar,
* "An Error Detected!!Selected will not %d",selected_item);
*/
}/*switch()*/
}
touchwin(stdscr);
refresh();
} while (key!=ESC);
delwin(messagebar);
delwin(menubar);
endwin();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -