📄 input.c
字号:
#include "input.h"
#include "frame.h"
#include <malloc.h>
#include <string.h>
int inputchar(INPUT *i,int ifshow,int if_use_Fn,int if_english)
{
int current_count=0,cur_x=0,cur_y=0,cur_sor=0;
int temp_char=0,j=0;
char *temp=(char *)malloc((i->length)+1);
noecho();
keypad((i->f)->win,TRUE);
memset(temp,0,(i->length)+1);
cur_sor=current_count=strlen(i->str);
getbegyx((i->f)->win,cur_x,cur_y);
if(ifshow == 1)
{
mvwprintw((i->f)->win,0,0,"%s",i->str);
}
else
{
for(j=0;j<current_count;j++)
{
mvwprintw((i->f)->win,0,j,"*");
}
}
wrefresh((i->f)->win);
move(cur_x,cur_y+current_count);
wrefresh((i->f)->win);
do
{
temp_char=wgetch((i->f)->win);
switch (temp_char)
{
case KEY_BACKSPACE/*263退格键*/:
if(cur_sor>0&&cur_sor<current_count)
{
strcpy((i->str)+cur_sor-1,(i->str)+cur_sor);
current_count--;
cur_sor--;
i->f->clearout(i->f);
if(ifshow == 1)
{
mvwprintw((i->f)->win,0,0,"%s",i->str);
}
else
{
for(j=0;j<current_count;j++)
{
mvwprintw((i->f)->win,0,j,"*");
}
}
wrefresh((i->f)->win);
move(cur_x,cur_y+cur_sor);
refresh();
}
else
{
if(cur_sor>0&&cur_sor==current_count)
{
*((i->str)+cur_sor-1)=0;
current_count--;
cur_sor--;
wprintw(i->f->win,"\b \b");
wrefresh((i->f)->win);
}
}
continue;
case KEY_UP/*259向上键*/:
if(i->neighbor[0] != 0)
{
free(temp);
echo();
return i->neighbor[0];
}
continue;
case KEY_DOWN/*258向下键*/:
if(i->neighbor[1] != 0)
{
free(temp);
echo();
return i->neighbor[1];
}
continue;
case KEY_LEFT/*260向左键*/:
if(cur_sor>0)
{
cur_sor--;
move(cur_x,cur_y+cur_sor);
refresh();
}
continue;
case KEY_RIGHT/*261向右键*/:
if(cur_sor<current_count)
{
cur_sor++;
move(cur_x,cur_y+cur_sor);
refresh();
}
continue;
case 27/*ESC键*/:
free(temp);
echo();
return 27;
break;
case 9/*Tab键*/:
if(i->neighbor[2] != 0)
{
free(temp);
echo();
return i->neighbor[2];
}
continue;
case 10/*回车键*/:
free(temp);
echo();
if(if_use_Fn)
{
return 10;
}
else
{
return i->neighbor[1];
}
continue;
default:
if(if_english)/////
{
if(temp_char>=33&&temp_char<=126)///////
{
if(current_count<(i->length))/**/
{
if(cur_sor>=0&&cur_sor<current_count)
{
strcpy(temp,(i->str)+cur_sor);
*((i->str)+cur_sor)=temp_char;
strcpy((i->str)+cur_sor+1,temp);
cur_sor++;
current_count++;
i->f->clearout(i->f);
if(ifshow == 1)
{
mvwprintw((i->f)->win,0,0,"%s",i->str);
}
else
{
for(j=0;j<current_count;j++)
{
mvwprintw((i->f)->win,0,j,"*");
}
}
wrefresh((i->f)->win);
move(cur_x,cur_y+cur_sor);
refresh();
memset(temp,0,(i->length)+1);
continue;
}
else
{
*((i->str)+cur_sor)=temp_char;
if(ifshow == 1)
{
/* wprintw((i->f)->win,"%c",temp_char);*/
mvwprintw((i->f)->win,0,0,"%s",i->str);
}
else
{
wprintw((i->f)->win,"*");
}
wrefresh((i->f)->win);
cur_sor++;
current_count++;
continue;
}
}
else
{
continue;
}/**/
}
else
{
if(if_use_Fn)
{
if (temp_char>=265&&temp_char<=276)
{
return temp_char;
}
else
{
continue;
}
}
else
{
continue;
}
}////////////////
}else///
{
if(current_count<(i->length))/**/
{
if(cur_sor>=0&&cur_sor<current_count)
{
strcpy(temp,(i->str)+cur_sor);
*((i->str)+cur_sor)=temp_char;
strcpy((i->str)+cur_sor+1,temp);
cur_sor++;
current_count++;
i->f->clearout(i->f);
if(ifshow == 1)
{
mvwprintw((i->f)->win,0,0,"%s",i->str);
}
else
{
for(j=0;j<current_count;j++)
{
mvwprintw((i->f)->win,0,j,"*");
}
}
wrefresh((i->f)->win);
move(cur_x,cur_y+cur_sor);
refresh();
memset(temp,0,(i->length)+1);
continue;
}
else
{
*((i->str)+cur_sor)=temp_char;
if(ifshow == 1)
{
/* wprintw((i->f)->win,"%c",temp_char);*/
mvwprintw((i->f)->win,0,0,"%s",i->str);
}
else
{
wprintw((i->f)->win,"*");
}
wrefresh((i->f)->win);
cur_sor++;
current_count++;
continue;
}
}
else
{
continue;
}/**/
}
}
}
while (1);
}
void free_input_frame(INPUT **i)
{
free((*i)->str);
free((*i));
}
void del_string(INPUT *i)
{
memset(i->str,'\0',strlen(i->str));
i->f->clearout(i->f);
wrefresh((i->f)->win);
wmove((i->f)->win,0,0);
wrefresh((i->f)->win);
}
INPUT *create_input(FRAME *f1,int l,int front,int next,int tab)
{
INPUT *i=(INPUT *)malloc(sizeof(INPUT));
i->str=(char *)malloc(l+1);
memset(i->str,0,l+1);
i->f=f1;
i->length=l;
i->neighbor[0]=front;
i->neighbor[1]=next;
i->neighbor[2]=tab;
i->free=free_input_frame;
i->input_char=inputchar;
i->del_str=del_string;
}
/*
int main()
{
initscr();
int sign=1;
if(has_colors==FALSE)
{
endwin();
exit(0);
}
start_color();
init_pair(1,COLOR_BLACK,COLOR_WHITE);
init_pair(2,COLOR_RED,COLOR_BLUE);
init_pair(3,COLOR_BLACK,COLOR_RED);
wbkgd(stdscr,COLOR_PAIR(1));
refresh();
//////////////////////////////////////////////////
FRAME *f=creat_frame(11,29,1,20,3);
FRAME *f1=creat_frame(13,29,1,20,3);
f->draw(f);
f1->draw(f1);
INPUT *i1=create_input(f,10,2,2,3);
INPUT *i2=create_input(f1,10,1,1,3);
do
{
switch (sign)
{
case 1:
sign=i1->input_char(i1,1,0);
break;
case 2:
sign=i2->input_char(i2,1,0);
break;
}
}
while (sign!=3);
mvprintw(12,29,"%s",i1->str);
i1->del_str(i1);
getchar();
mvprintw(14,29,"%s",i2->str);
i2->del_str(i2);
getchar();
refresh();
f->free(&f);
f1->free(&f1);
i1->free(&i1);
i2->free(&i2);
//////////////////////////////////////////////////
attroff(COLOR_PAIR(1));
attroff(COLOR_PAIR(2));
attroff(COLOR_PAIR(3));
endwin();
return 0;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -