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

📄 q_edit.cpp

📁 QCurses全部代码 QCurses全部代码
💻 CPP
字号:
#include    "qcurses/Q_Edit.hpp"/*######################################### 函数功能:析构函数                     ## 返 回 值:NULL                         ## 函数参数:NULL                         #########################################*/Q_Edit::~Q_Edit(){	delete  []Value;}//------------------------------------------------------------------------------------------/*######################################### 函数功能:构造函数                     ## 返 回 值:NULL                         ## 函数参数:WINDOW   *vMainWin  主窗口   ##           int      vWidth     宽度     ##           int      vYBegin    起始     ##           int      vXBegin    起始     ##           int      vCFront    文字颜色 ##           int      vCBack     背景色   ##           int      vMode      模式     #########################################*/Q_Edit::Q_Edit(WINDOW  *vMainWin,int  vWidth,int  vYBegin,int  vXBegin,int  vCFront,int  vCBack,int  vMode):Q_Object(vMainWin,  1,  vWidth,  vYBegin,  vXBegin,   false,  vCFront,  vCBack){	//在主窗口的前后加入 []	mvwaddch(MainWin,_beginy,_beginx-1,'[');	mvwaddch(MainWin,_beginy,_beginx+WorkWin->_maxx,']');	wrefresh(MainWin);	//将当前窗口刷新	wattron(WorkWin,A_UNDERLINE);	waddstr(WorkWin,"                                                                                                      ");	wmove(WorkWin,0,0);	wrefresh(WorkWin);	//初始化数值	Decimal = 0;	NowKey  = 0;	Value   = new char[90];	Mode    = vMode;	memset(Value,'\0',90);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:设置文字                     ## 返 回 值:NULL                         ## 函数参数:char    *Text  要显示的文字  ##                   ...    用 vprintf    #########################################*/void      Q_Edit::Set(const char   *format,...){	//赋值	va_list  ap;	va_start (ap,format);	if(vsprintf(Value,format,ap)<0)		strcpy(Value,"TooLong");	va_end(ap);	//打印-暂时不提供 Money 类	wattroff(WorkWin,A_UNDERLINE);	mvwaddstr(WorkWin,0,0,"                                                                                       ");	switch (Mode)	{	case MINTAGER:  //整形		mvwaddstr(WorkWin,0,WorkWin->_maxx-strlen(Value),Value);		break;	case MDOUBLE:  //浮点型		mvwaddstr(WorkWin,0,WorkWin->_maxx-strlen(Value),Value);		break;	case MSTRING:  //字符串		mvwaddstr(WorkWin,0,0,Value);		break;	}	wattron(WorkWin,A_UNDERLINE);	wrefresh(WorkWin);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:判断是否小数部分够了         ## 返 回 值:是否够了                     ## 函数参数:NULL                         #########################################*/bool      Q_Edit::isFullDecimal(){	int  i=0,j=0,k=0;	char  *Temp = new char[90];	memset(Temp,'\0',90);	GetNowLine(Temp);	for (i=0;i<WorkWin->_maxx-1;i++)		if (Temp[i]=='.')			break;	for (j=i+1;j<WorkWin->_maxx-1;j++)	{		if (Temp[j]==' ')			break;		k++;	}	delete  []Temp;	if (k>=Decimal)		return(true);	return(false);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:取得当前行的值               ## 返 回 值:NULL                         ## 函数参数:char   *TEMP  临时字符串     #########################################*/void      Q_Edit::GetNowLine(char *TEMP){	int  x,y,i;	getyx(WorkWin,x,y);	for(i=0;i<=WorkWin->_maxx-1;i++)		TEMP[i] = mvwinch(WorkWin,0,i);	TEMP[i] = '\0';	wmove(WorkWin,x,y);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:从 Edit 控件中查找字符       ## 返 回 值:实际个数                     ## 函数参数:char    CH    查找字符       #########################################*/int       Q_Edit::FindCH(char CH){	int   numb=0;	char  *Temp = new char[90];	memset(Temp,'\0',90);	GetNowLine(Temp);	for(int i=0;i<WorkWin->_maxx-1;i++)	{		if (Temp[i] == CH)			numb++;	}	delete  []Temp;	return(numb);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:得到数值                     ## 返 回 值:NULL                         ## 函数参数:NULL                         #########################################*/void      Q_Edit::GetValue(){	GetNowLine(Value);	Value[FindLastSpace(Value)] = '\0';	//赋值完毕后显示出来	Set(Value);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:找到字符串的最后一个空白     ## 返 回 值:空白的下标                   ## 函数参数:char   *VAL  查找字符串      #########################################*/int       Q_Edit::FindLastSpace(char *VAL){	int LEN = strlen(VAL);	for (int i=LEN-1;i>=0;i--)	{		if(VAL[i] != 32)			return(i+1);	}	return(0);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:找到字符串的最后一个空白     ## 返 回 值:空白的下标                   ## 函数参数:char   *VAL  查找字符串      #########################################*/bool      Q_Edit::isEnd(){	char  Tch,x,y;	getyx(WorkWin,x,y);	Tch = mvwinch(WorkWin,0,WorkWin->_maxx-1);	if(Tch!=' ')	{		wmove(WorkWin,x,y);		return(true);	}	wmove(WorkWin,x,y);	return(false);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:在控件上获取数值             ## 返 回 值:键盘的最后输入               ## 函数参数:NULL                         #########################################*/int       Q_Edit::Get(){	curs_set(1);                 //打开光标	int  x=strlen(Value);	int  FirstKey=0;  //第一次输入,如果是0就略过	wattron(WorkWin,A_UNDERLINE);	mvwaddstr(WorkWin,0,0,"                                                                      ");	wattroff(WorkWin,A_UNDERLINE);	mvwaddstr(WorkWin,0,0,Value);	wattron(WorkWin,A_UNDERLINE);	wrefresh(WorkWin);	while (1)	{		GetKey();		wrefresh(WorkWin);		if (isCheckBreak(NowKey))    //退出键			break;		if (isFilterKey(NowKey))     //过滤键			continue;		if (FirstKey==0)		{			mvwaddstr(WorkWin,0,0,"                                                              ");			wrefresh(WorkWin);	 			x=0;			FirstKey++;		}		//一切OK后开始录入数值		if(NowKey==8)		{			int  z,y;			if (x>=WorkWin->_maxx-1)			{				x=WorkWin->_maxx-1;				mvwdelch(WorkWin,0,x-1);			}			mvwdelch(WorkWin,0,x-1);			if(x>0)				x--;			else				x=0;			getyx(WorkWin,z,y);			mvwaddch(WorkWin,z,WorkWin->_maxx-1,' ');			wmove(WorkWin,z,y);		}		else if(NowKey==KEY_LEFT)		{			if(x>0)				x--;			else				x=0;		}		else if(NowKey==KEY_RIGHT)		{			if(x<WorkWin->_maxx-1)				x++;			else				x=WorkWin->_maxx-1;			wmove(WorkWin,0,x);		}		else		{			if (isEnd())				continue;			wattroff(WorkWin,A_UNDERLINE);			mvwinsch(WorkWin,0,x,NowKey);			wattron(WorkWin,A_UNDERLINE);			if(x<WorkWin->_maxx-1)				x++;		}		wmove(WorkWin,0,x);	}	GetValue();	curs_set(0);                 //关闭光标	return(NowKey);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:检查过滤                     ## 返 回 值:是否通过                     ## 函数参数:int   &Key   检查的字符      #########################################*/bool      Q_Edit::isFilterKey(int   &Key){	switch (Mode)	{	case MINTAGER:  //整形		if ((Key<48 || Key>57) && Key!= 8)			return(true);		break;	case MSTRING:  //字符串		break;	case MDOUBLE:  //浮点型		if ((Key<48 || Key>57) && Key!= 8 && Key!=46)			return(true);		if (FindCH('.')>=1 && Key==46)			return(true);		if (Key!= 8)			if (Decimal!=0 && isFullDecimal())				return(true);		break;	}	if (Key==KEY_UP || Key==KEY_DOWN || Key==127)		return(true);	return(false);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:检查是否键入了退出按钮       ## 返 回 值:是否通过                     ## 函数参数:int   &Key   检查的字符      #########################################*/bool      Q_Edit::isCheckBreak(int    &Key){	if (Key==10)		return(true);	if (Key==9)		return(true);	if (Key==KEY_UP)		return(true);	if (Key==KEY_DOWN)		return(true);	return(false);}//------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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