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

📄 q_list.cpp

📁 QCurses全部代码 QCurses全部代码
💻 CPP
字号:
#include    "qcurses/Q_List.hpp"/*# 最后修改时间 2004-12-6 ,加入了一个 TmpValue 用来装载超过 RealMaxx 的变量#####*//*######################################### 函数功能:构造函数                     ## 函数参数:WINDOW   *vMainWin  主窗口   ##           int      vHeight     高度     ##           int      vWidth     宽度     ##           int      vYBegin    起始y    ##           int      vXBegin    起始x    ##           bool     vBox       是否画框 ##           int      vCFront    文字颜色 ##           int      vCBack     背景颜色 ##           int      vMaxCount  最大值   #########################################*/Q_List::Q_List(WINDOW  *vMainWin,int   vHeight,int  vWidth,int  vYBegin,int  vXBegin,bool   vBox,int  vCFront,int  vCBack,int  vMaxCount):Q_Object(vMainWin,  vHeight,  vWidth,  vYBegin,  vXBegin,   vBox,  vCFront,  vCBack){	EndRow = 0;	NowKey = 0;	nCount = 0;	NowLINE = 0;	NowIndex = 0;	NowTopINDEX = 0;	if (vMaxCount>MAXCOUNT || vMaxCount==0)		vMaxCount = MAXCOUNT;	MaxCount = vMaxCount;}//------------------------------------------------------------------------------------------/*######################################### 函数功能:析构函数                     ## 返 回 值:NULL                         ## 函数参数:NULL                         #########################################*/Q_List::~Q_List(){	FreeValue();}//------------------------------------------------------------------------------------------/*######################################### 函数功能:控件获取值                   ## 返 回 值:返回的是最后的键盘值         ## 函数参数:NULL                         #########################################*/int      Q_List::Get(){	int  line=RealY+NowLINE;      //行	int  index=NowIndex;          //索引	char *TmpValue = new char[1024];	wattroff(WorkWin,A_REVERSE);	Refresh(NowTopINDEX);	wattron(WorkWin,A_REVERSE);	memset(TmpValue,'\0',1024);	strcpy(TmpValue,Value[NowIndex]);	TmpValue[RealMaxx-2]='\0';	mvwaddstr(WorkWin,RealY+NowLINE,RealX,TmpValue);	wattroff(WorkWin,A_REVERSE);	for (; ; )	{		GetKey();		wrefresh(WorkWin);		if(isCheckBreak(NowKey))     //退出键			break;		wattroff(WorkWin,A_REVERSE);		memset(TmpValue,'\0',1024);		strcpy(TmpValue,Value[index]);		TmpValue[RealMaxx-2]='\0';		mvwaddstr(WorkWin,line,RealX,TmpValue);		if(NowKey==KEY_UP)		{			if (index<=0)				index=0;			else			{				index--;				line--;			}		}		if(NowKey==KEY_DOWN)		{			if (index >= nCount-1)				index = nCount-1;			else			{				index++;				line++;			}		}		if(NowKey==338)       //PageDown		{			if (index+(RealMaxy*2)<nCount)				index+=RealMaxy;			else			{				if (nCount-RealMaxy>0)					index=nCount-RealMaxy;				else					index=0;			}			line=0;		}		if(NowKey==339)       //PageUp		{			if (index-RealMaxy>=0)				index-=RealMaxy;			else				index = 0;			line=0;		}		if(NowKey==KEY_HOME)  //Home		{			index=0;			line=0;		}		if(NowKey==KEY_END)   //End		{			index = nCount-1;			if (nCount-1>RealMaxy)				line = RealY+RealMaxy;			else				line = RealY+nCount-1;		}				if (line>RealY+RealMaxy-1)		{			line = RealY+RealMaxy-1;			Refresh(index-RealMaxy+1);			NowTopINDEX = index-RealMaxy+1;		}		if (line<RealY)		{			line = RealY;			Refresh(index);			NowTopINDEX = index;		}		wattron(WorkWin,A_REVERSE);		memset(TmpValue,'\0',1024);		strcpy(TmpValue,Value[index]);		TmpValue[RealMaxx-2]='\0';		mvwaddstr(WorkWin,line,RealX,TmpValue);		wattroff(WorkWin,A_REVERSE);	}//	wattroff(WorkWin,A_REVERSE);//	mvwaddstr(WorkWin,line,RealX,Value[index]);	wrefresh(WorkWin);	NowIndex = index;	NowLINE = line-1;	return(NowKey);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:检查是否键入了退出按钮       ## 返 回 值:是否属于                     ## 函数参数:当前按键                     #########################################*/bool     Q_List::isCheckBreak(int&  Key){	if (Key==10)		return(true);	if (Key==9)		return(true);	if (Key==KEY_LEFT)		return(true);	if (Key==KEY_RIGHT)		return(true);	return(false);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:从 start 开始刷新            ## 返 回 值:NULL                         ## 函数参数:开始值                       #########################################*/void     Q_List::Refresh(int   StartLine){	int  LINES = RealY,i=0;	char *TmpValue = new char[1024];	for (i=StartLine;i<StartLine+RealMaxy;i++)	{		if (i>=nCount)			break;		memset(TmpValue,'\0',1024);		strcpy(TmpValue,Value[i]);		TmpValue[RealMaxx-2]='\0';		mvwaddstr(WorkWin,LINES,RealX,TmpValue);		for (int j=RealX+strlen(TmpValue);j<RealX+RealMaxx;j++)			mvwprintw(WorkWin,LINES,j," ");		LINES++;	}	if (StartLine>0)		mvwaddstr(WorkWin,RealY,RealX+RealMaxx-2,"↑");	else		mvwaddstr(WorkWin,RealY,RealX+RealMaxx-2,"  ");	if (i<nCount)		mvwaddstr(WorkWin,RealY+RealMaxy-1,RealX+RealMaxx-2,"↓");	else		mvwaddstr(WorkWin,RealY+RealMaxy-1,RealX+RealMaxx-2,"  ");	wrefresh(WorkWin);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:从 start 开始刷新            ## 返 回 值:NULL                         ## 函数参数:开始值                       #########################################*/bool     Q_List::Add(char  *format,...){	//赋值	char     *TempStr = new char[1024];	va_list  ap;	va_start (ap,format);	if(vsprintf(TempStr,format,ap)<0)		strcpy(TempStr,"TooLong");	va_end(ap);	Value[nCount] = new char[strlen(TempStr)+1];	memset(Value[nCount],'\0',strlen(TempStr)+1);	strcpy(Value[nCount],TempStr);	delete []TempStr;	if (nCount>=MaxCount && MaxCount>0)		return false;	else		nCount++;	if (EndRow <= RealMaxy)		EndRow++;	Refresh(0);	NowLINE = 0;	NowIndex = 0;	NowTopINDEX = 0;	wrefresh(WorkWin);	return(true);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:清空数据从头开始             ## 返 回 值:NULL                         ## 函数参数:NULL                         #########################################*/void     Q_List::Clear(){	int  i=0;	char *SPACE = new char[RealMaxx];	FreeValue();	memset(SPACE,' ',RealMaxx);	SPACE[RealMaxx-1]='\0';	for (i=RealY;i<=RealMaxy;i++)		mvwprintw(WorkWin,i,RealX,"%s",SPACE);	wmove(WorkWin,RealX,RealY);	delete  []SPACE;	nCount = 0;	NowLINE = 0;	NowIndex = 0;	NowTopINDEX = 0;	wrefresh(WorkWin);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:将当前列表写入指定文件       ## 返 回 值:成功写入返回 true 否则 false ## 函数参数:char  *FileName   写入文件   #########################################*/bool     Q_List::WriteToFile(char  *FileName){	FILE  *FP;	if ((FP=fopen(FileName,"w"))==NULL)		return(false);	for (int i=0;i<nCount;i++)		fprintf(FP,"%s\n",Value[i]);	fclose(FP);	return(true);}//------------------------------------------------------------------------------------------/*######################################### 函数功能:是否所有列表值               ## 返 回 值:NULL                         ## 函数参数:NULL                         #########################################*/void     Q_List::FreeValue(){	for (int i=0;i<nCount;i++)		delete []Value[i];}

⌨️ 快捷键说明

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