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

📄 825.c

📁 curses界面编程
💻 C
📖 第 1 页 / 共 2 页
字号:
                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 + -