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

📄 q_dateedit.cpp

📁 QCurses全部代码 QCurses全部代码
💻 CPP
字号:
#include    "qcurses/Q_DateEdit.hpp"/*######################################### 函数功能:析构函数                     ## 返 回 值:NULL                         ## 函数参数:NULL                         #########################################*/Q_DateEdit::~Q_DateEdit(){	delete  []Value;	delete  []ErrorText;}//------------------------------------------------------------------------------------------/*######################################### 函数功能:构造函数                     ## 返 回 值:NULL                         ## 函数参数:WINDOW   *vMainWin  主窗口   ##           int      vYBegin    起始     ##           int      vXBegin    起始     ##           int      vCFront    文字颜色 ##           int      vCBack     背景色   ##           int      vMode      模式     #########################################*/Q_DateEdit::Q_DateEdit(WINDOW  *vMainWin,int  vYBegin,int  vXBegin,int  vCFront,int  vCBack):Q_Edit(vMainWin, 10 , vYBegin, vXBegin, vCFront, vCBack, MINTAGER){	//在主窗口的前后加入 []	mvwaddch(MainWin,_beginy,_beginx-1,'[');	mvwaddch(MainWin,_beginy,_beginx+WorkWin->_maxx+1,']');	wrefresh(MainWin);	//将当前窗口刷新	wattron(WorkWin,A_UNDERLINE);	waddstr(WorkWin,"    ");	wattroff(WorkWin,A_UNDERLINE);	waddstr(WorkWin,"-");	wattron(WorkWin,A_UNDERLINE);	waddstr(WorkWin,"  ");	wattroff(WorkWin,A_UNDERLINE);	waddstr(WorkWin,"-");	wattron(WorkWin,A_UNDERLINE);	waddstr(WorkWin,"  ");	wattroff(WorkWin,A_UNDERLINE);	wmove(WorkWin,0,0);	wrefresh(WorkWin);	//初始化数值	ErrorText = new char(50);	Set("1982-11-11");	GetNowDate();}//------------------------------------------------------------------------------------------/*######################################### 函数功能:设置文字                     ## 返 回 值:NULL                         ## 函数参数:char    *Text  要显示的文字  ##                   ...    用 vprintf    #########################################*/void      Q_DateEdit::Set(const char *String){	wattroff(WorkWin,A_UNDERLINE);	sscanf(String,"%4d-%d-%d",&Date.YEAR,&Date.MONTH,&Date.DAY);	sprintf(Value,"%4d-%02d-%02d",Date.YEAR,Date.MONTH,Date.DAY);	mvwaddstr(WorkWin,0,0,Value);	wattron(WorkWin,A_UNDERLINE);	wrefresh(WorkWin);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:在控件上获取数值             ## 返 回 值:键盘的最后输入               ## 函数参数:NULL                         #########################################*/int       Q_DateEdit::Get(){	curs_set(1);                 //打开光标	int  x=strlen(Value);	int  FirstKey=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))    //退出键		{			GetValue();			ErrCode = CheckDate();			if (ErrCode!=0)			{				x = 10;				continue;			}			break;		}		if (isFilterKey(NowKey))     //过滤键			continue;		if (FirstKey==0)		{			wmove(WorkWin,0,0);			wattron(WorkWin,A_UNDERLINE);			waddstr(WorkWin,"    ");			wattroff(WorkWin,A_UNDERLINE);			waddstr(WorkWin,"-");			wattron(WorkWin,A_UNDERLINE);			waddstr(WorkWin,"  ");			wattroff(WorkWin,A_UNDERLINE);			waddstr(WorkWin,"-");			wattron(WorkWin,A_UNDERLINE);			waddstr(WorkWin,"  ");			wattroff(WorkWin,A_UNDERLINE);			x=0;			FirstKey++;		}		//一切OK后开始录入数值		if(NowKey==KEY_BACKSPACE)		{			mvwaddch(WorkWin,0,x,' ');			if (x==5 || x==8)				x--;			if(x>0)				x--;			else				x=0;		}		else		{			if (isEnd())				continue;			wattroff(WorkWin,A_UNDERLINE);			mvwaddch(WorkWin,0,x,NowKey);			wattron(WorkWin,A_UNDERLINE);			if(x<WorkWin->_maxx)				x++;			if (x==4)				x = 5;			if (x==7)				x = 8;		}		wmove(WorkWin,0,x);	}	GetValue();	curs_set(0);                 //关闭光标	ErrCode = CheckDate();       //检查	return(NowKey);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:检查日期输入正确性           ## 返 回 值:错误号                       ## 函数参数:NULL                         #########################################*/int    Q_DateEdit::CheckDate(){	static int nian[12]={31,28,31,30,31,30,31,31,30,31,30,31};	int xyear,xmonth,xday;	int flagrn=0,fhz;	fhz=sscanf(Value,"%4d-%d-%d",&xyear,&xmonth,&xday);	if(fhz==-1||fhz==0)	{		strcpy(ErrorText,"日期数据录入不全");		return(103);	}	if((xyear<1949))	{		strcpy(ErrorText,"年份值小于1949");		return(100);	}	if((xmonth<1)||(xmonth>12))	{		strcpy(ErrorText,"月份值小于1或大于12");		return(101);	}	if(xmonth==2)		if((!(xyear%4))&&(xyear%100)||(!(xyear%400)))			flagrn=1;  //不是闰年	flagrn+=nian[xmonth-1];	if((xday<1)||(xday>flagrn))	{		strcpy(ErrorText,"日数大于本月天数");		return(102);	}	return(0);}//-----------------------------------------------------------------------------------void   Q_DateEdit::GetValue(){	GetNowLine(Value);	Value[11] = '\0';	sscanf(Value,"%4d-%d-%d",&Date.YEAR,&Date.MONTH,&Date.DAY);	Set(Value);}//-----------------------------------------------------------------------------------char   *Q_DateEdit::GetNowDate(){	char  *NOWDATE = new char[11];	time_t timep;	struct tm *p;	time(&timep);	p=localtime(&timep);	sprintf(NOWDATE,"%4d%02d%02d",1900+p->tm_year,p->tm_mon,p->tm_mday);	NowDate.DAY = p->tm_mday;	NowDate.MONTH = p->tm_mon;	NowDate.YEAR = 1900+p->tm_year;	return NOWDATE;}

⌨️ 快捷键说明

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