📄 textbox.c
字号:
/*
TextBox struct 函数实现
*/
#include "BaseEnvInit.h"
#include "FunctionLib.h"
#include "TextBox.h"
void ShowTextBox(TextBox * pText)
{
werase(pText->m_win);
if(pText->m_isPasswd==TRUE)
{
int i=0;
for(;i<strlen(pText->m_str);++i)
{
mvwaddch(pText->m_win,0,i,'*');
}
}
else
{
mvwprintw(pText->m_win,0,0,"%s",pText->m_title);
mvwprintw(pText->m_win,0,strlen(pText->m_title),"%s",pText->m_str);
}
touchwin(pText->m_win);
wrefresh(pText->m_win);
}
int InputString(struct _TextBox * pText)
{
int i=strlen(pText->m_str);
int maxlen=pText->m_strmaxlen;
int ch;
keypad(pText->m_win,TRUE);
cbreak();
noecho();
do
{
pText->ShowTextBox(pText);
ch=wgetch(pText->m_win);
if(pText->m_isInteger==TRUE) // 只有数字的的模式
{
if(pText->m_isFn2_9==TRUE)
{
if(!( (ch>='0' && ch<='9')
|| ch==KEY_UP || ch==KEY_DOWN
|| ch==KEY_HOME || KEY_END==ch
|| ch==KEY_PPAGE || ch==KEY_NPAGE || ch==9
|| ch==10 || ch==27 ||
ch==KEY_BACKSPACE || (ch>=KEY_F(2) && ch<=KEY_F(9) ) ))
{continue;}
}
else
{
if(!( (ch>='0' && ch<='9')
|| ch=='.'
|| ch==KEY_UP || ch==KEY_DOWN || ch==9
|| ch==10 || ch==27 || ch==KEY_BACKSPACE))
{continue;}
}
}else // pText->m_isintger=FLASE. 字符模式。
{
if(!( (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') ||(ch>='0' && ch<='9')
|| ch==KEY_BACKSPACE || ch==KEY_UP || ch==9
|| ch==KEY_DOWN || ch==10 || ch==27))
{
continue;
}
}
// 这段键值判断代码需要优化 10/25
if (ch==KEY_LEFT || ch==KEY_RIGHT || ch==KEY_F(1))
{
// 保留对 左右键键的控制
continue;
}else if(27==ch)
{
/*
memset(pText->m_str,0,512);
i=0;
pText->ShowTextBox(pText);
*/
continue;
}else if(ch==10 || ch==KEY_UP || ch==KEY_DOWN || ch==9 ||
ch==KEY_HOME || ch==KEY_END|| ch==KEY_NPAGE || ch==KEY_PPAGE ||
( ch>=KEY_F(2) && ch<=KEY_F(9) )) // Enter
{
(pText->m_str)[i]='\0';
pText->ShowTextBox(pText);
/*
if( (pText->m_strminlen ) > strlen(pText->m_str) )
{
char temp[20];
sprintf(temp,"请输入:[%d - %d]个字符串.",pText->m_strminlen,pText->m_strmaxlen);
MessageBox(temp,"按任意键返回.",NOBTN);
continue;
}
*/
break;
}else if(ch==KEY_BACKSPACE) // Backspace
{
if(0==i)
{
continue;
}
else
{
(pText->m_str)[i--];
pText->m_str[i]='\0';
pText->ShowTextBox(pText);
}
}else // 其他字符
{
if(i<pText->m_strmaxlen)
{
(pText->m_str)[i++]=ch;
(pText->m_str)[i]='\0';
pText->ShowTextBox(pText);
}
}
}while(1);
return ch;
}
void FreeTextBox(TextBox * pText)
{
if(delwin(pText->m_win)==ERR)
{
fprintf(stderr,"Error - in FreeTextBox function delwin(pText->m_win).\n Exit Program.");
endwin();
exit(1);
}
free(pText);
}
void ChangeTextBox(TextBox ** ppText)
{
TextBox * ptempText=*ppText;
*ppText=MakeTextBox(*ppText);
ptempText->FreeTextBox(ptempText);
}
TextBox * MakeTextBox(TextBox * pText)
{
TextBox * p=NULL;
p=(TextBox *)malloc(sizeof(TextBox));
if(!p)
{
//fprintf(stderr,"Error - malloc TextBox false .exit program.");
//exit(1);
return NULL;
}
memset(p,0,sizeof(TextBox));
if(NULL==pText)
{
(p->m_spc).s_py=0;
(p->m_spc).s_px=0;
(p->m_spc).s_sizey=1;
(p->m_spc).s_sizex=16;
(p->m_spc).s_color=BLACK_RED;
p->m_strmaxlen=10;
p->m_strminlen=1;
p->m_isInteger=TRUE;
p->m_isPasswd=FALSE;
p->m_isFn2_9=FALSE;
memset(p->m_title,0,10);
memset(p->m_str,0,512);
//strcpy(p->m_title,"CN:");
if(!newwin)
{
return NULL;
}
}
else
{
memcpy(p,pText,sizeof(TextBox));
//FreeTextBox(pText);
}
p->m_win=newwin((p->m_spc).s_sizey,(p->m_spc).s_sizex,(p->m_spc).s_py,(p->m_spc).s_px);
wbkgd(p->m_win,COLOR_PAIR( (p->m_spc).s_color));
p->ShowTextBox=ShowTextBox;
p->FreeTextBox=FreeTextBox;
p->InputString=InputString;
p->ChangeTextBox=ChangeTextBox;
return p;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -