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

📄 vt100disp.cpp

📁 vt100终端仿真程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			case '\x70'://'p'
			case '\x72'://'r'
			case '\x73'://'s'
			case '\x71'://'q'
				/*
				MoveToEx(hDC,iXpos,iYpos+iHalfHigh,NULL);
				LineTo(hDC,iXpos+struScrMsp.iChrWidth,iYpos+iHalfHigh);
				*/
				arrEndPoint[0].x=iXpos;
				arrEndPoint[0].y=iYpos+iHalfHigh;
				arrEndPoint[1].x=iXpos+struScrMsp.iChrWidth;
				arrEndPoint[1].y=iYpos+iHalfHigh;

				Polyline(hDC,arrEndPoint,2);

				break;

			case '\x78'://'x'
				/*
				MoveToEx(hDC,iXpos+iHalfWidth,iYpos,NULL);
				LineTo(hDC,iXpos+iHalfWidth,iYpos+struScrMsp.iChrHigh);
				*/
				arrEndPoint[0].x=iXpos+iHalfWidth;
				arrEndPoint[0].y=iYpos;
				arrEndPoint[1].x=iXpos+iHalfWidth;
				arrEndPoint[1].y=iYpos+struScrMsp.iChrHigh;

				Polyline(hDC,arrEndPoint,2);


				break;

			case '\x6e'://+
				/*
				MoveToEx(hDC,iXpos+iHalfWidth,iYpos,NULL);
				LineTo(hDC,iXpos+iHalfWidth,iYpos+struScrMsp.iChrHigh);
				MoveToEx(hDC,iXpos,iYpos+iHalfHigh,NULL);
				LineTo(hDC,iXpos+struScrMsp.iChrWidth,iYpos+iHalfHigh);
				*/
				arrEndPoint[0].x=iXpos+iHalfWidth;
				arrEndPoint[0].y=iYpos;
				arrEndPoint[1].x=iXpos+iHalfWidth;
				arrEndPoint[1].y=iYpos+struScrMsp.iChrHigh;
				Polyline(hDC,arrEndPoint,2);

				arrEndPoint[0].x=iXpos;
				arrEndPoint[0].y=iYpos+iHalfHigh;
				arrEndPoint[1].x=iXpos+struScrMsp.iChrWidth;
				arrEndPoint[1].y=iYpos+iHalfHigh;
				Polyline(hDC,arrEndPoint,2);

				break;

			case '\x74':
				/*
				MoveToEx(hDC,iXpos+iHalfWidth,iYpos,NULL);
				LineTo(hDC,iXpos+iHalfWidth,iYpos+struScrMsp.iChrHigh);
				MoveToEx(hDC,iXpos+iHalfWidth,iYpos+iHalfHigh,NULL);
				LineTo(hDC,iXpos+struScrMsp.iChrWidth,iYpos+iHalfHigh);
				*/
				arrEndPoint[0].x=iXpos+iHalfWidth;
				arrEndPoint[0].y=iYpos;
				arrEndPoint[1].x=iXpos+iHalfWidth;
				arrEndPoint[1].y=iYpos+struScrMsp.iChrHigh;
				Polyline(hDC,arrEndPoint,2);

				arrEndPoint[0].x=iXpos+iHalfWidth;
				arrEndPoint[0].y=iYpos+iHalfHigh;
				arrEndPoint[1].x=iXpos+struScrMsp.iChrWidth;
				arrEndPoint[1].y=iYpos+iHalfHigh;
				Polyline(hDC,arrEndPoint,2);

				break;

			case '\x75':
				/*
				MoveToEx(hDC,iXpos+iHalfWidth,iYpos,NULL);
				LineTo(hDC,iXpos+iHalfWidth,iYpos+struScrMsp.iChrHigh);
				MoveToEx(hDC,iXpos,iYpos+iHalfHigh,NULL);
				LineTo(hDC,iXpos+iHalfWidth,iYpos+iHalfHigh);
				*/
				arrEndPoint[0].x=iXpos+iHalfWidth;
				arrEndPoint[0].y=iYpos;
				arrEndPoint[1].x=iXpos+iHalfWidth;
				arrEndPoint[1].y=iYpos+struScrMsp.iChrHigh;
				Polyline(hDC,arrEndPoint,2);

				arrEndPoint[0].x=iXpos;
				arrEndPoint[0].y=iYpos+iHalfHigh;
				arrEndPoint[1].x=iXpos+iHalfWidth;
				arrEndPoint[1].y=iYpos+iHalfHigh;
				Polyline(hDC,arrEndPoint,2);

				break;

			case '\x76':
				/*
				MoveToEx(hDC,iXpos+iHalfWidth,iYpos,NULL);
				LineTo(hDC,iXpos+iHalfWidth,iYpos+iHalfHigh);
				MoveToEx(hDC,iXpos,iYpos+struScrMsp.iChrHigh,NULL);
				LineTo(hDC,iXpos+struScrMsp.iChrWidth,iYpos+struScrMsp.iChrHigh);
				*/
				arrEndPoint[0].x=iXpos+iHalfWidth;
				arrEndPoint[0].y=iYpos;
				arrEndPoint[1].x=iXpos+iHalfWidth;
				arrEndPoint[1].y=iYpos+iHalfHigh;
				Polyline(hDC,arrEndPoint,2);

				arrEndPoint[0].x=iXpos;
				arrEndPoint[0].y=iYpos+iHalfHigh;
				arrEndPoint[1].x=iXpos+struScrMsp.iChrWidth;
				arrEndPoint[1].y=iYpos+iHalfHigh;
				Polyline(hDC,arrEndPoint,2);

				break;

			case '\x77':
				/*
				MoveToEx(hDC,iXpos+iHalfWidth,iYpos+iHalfHigh,NULL);
				LineTo(hDC,iXpos+iHalfWidth,iYpos+struScrMsp.iChrHigh);
				MoveToEx(hDC,iXpos,iYpos+iHalfHigh,NULL);
				LineTo(hDC,iXpos+struScrMsp.iChrWidth,iYpos+iHalfHigh);
				*/
				arrEndPoint[0].x=iXpos+iHalfWidth;
				arrEndPoint[0].y=iYpos+iHalfHigh;
				arrEndPoint[1].x=iXpos+iHalfWidth;
				arrEndPoint[1].y=iYpos+struScrMsp.iChrHigh;
				Polyline(hDC,arrEndPoint,2);

				arrEndPoint[0].x=iXpos;
				arrEndPoint[0].y=iYpos+iHalfHigh;
				arrEndPoint[1].x=iXpos+struScrMsp.iChrWidth;
				arrEndPoint[1].y=iYpos+iHalfHigh;
				Polyline(hDC,arrEndPoint,2);

				break;

			case '\x61':
				Rectangle(hDC,iXpos,iYpos,iXpos+struScrMsp.iChrWidth,iYpos+struScrMsp.iChrHigh);
				break;

			default:
				ExtTextOut(hDC,iXpos,iYpos,ETO_CLIPPED,&TextRect,_T("+"),1,NULL);		
//				TextOut(hDC,iXpos,iYpos,"+",1);
				break;

			}
			iXpos+=struScrMsp.iChrWidth;
		}
		break;
		
	default:
		return 1;
	}

	if (iFan==1)
	{
		SetBkColor(hDC,RGB(0,0,0));
		SetTextColor(hDC,RGB(255,255,255)); // 0 255 0
//		SetTextColor(hDC,RGB(0,255,0)); //
	}

	ReleaseDC(hOutWnd,hDC);
	return 0;
}

///////////////////////////////////////////////////////////////////////////
//向上滚屏(换行、向下光标)
int ScreenRollUp()
{
	int i,j;
	int iTopRow,iButtomRow;
	int iRow,iNextRow;


	if (struScrMsp.iTopRow ==0 && struScrMsp.iButtomRow ==23)//全屏滚动
	{
		ClearBuf(0,0,0,iWidth-1);
		
		if (struScrMsp.iBaseRow<23)
			struScrMsp.iBaseRow++;
		else 
			struScrMsp.iBaseRow=0;
		
		Refresh(0,0,23,iWidth-1);
	}
	else//局部滚屏
	{
		iTopRow=struScrMsp.iTopRow ;
		iButtomRow=struScrMsp.iButtomRow;

		for(i=iTopRow ;i<iButtomRow ;i++)
		{
			iRow=(i+struScrMsp.iBaseRow)%24;
			iNextRow=(iRow+1)%24;
			for(j=0;j<iWidth;j++)
			{
				ScreenBuf[iRow][j].ch =ScreenBuf[iNextRow][j].ch ;
				ScreenBuf[iRow][j].iFan =ScreenBuf[iNextRow][j].iFan ;
				ScreenBuf[iRow][j].iType  =ScreenBuf[iNextRow][j].iType  ;
			}
		}
		ClearBuf(iButtomRow ,0,iButtomRow ,iWidth-1);
		Refresh(iTopRow ,0,iButtomRow ,iWidth-1);
	}

	return 0;
	
}


///////////////////////////////////////////////////////////////////////////
//向下滚屏(向上光标)
int ScreenRollDown()
{
	int i,j;
	int iTopRow,iButtomRow;
	int iRow,iNextRow;

	if (struScrMsp.iTopRow ==0 && struScrMsp.iButtomRow ==23)//全屏滚动
	{
		ClearBuf(23,0,23,iWidth-1);
		
		if (struScrMsp.iBaseRow>0)
			struScrMsp.iBaseRow--;
		else 
			struScrMsp.iBaseRow=23;
		
		Refresh(0,0,23,iWidth-1);
	}
	else//局部滚屏
	{
		iTopRow=struScrMsp.iTopRow;
		iButtomRow=struScrMsp.iButtomRow;

		for(i=iButtomRow-1 ;i>=iTopRow ;i--)
		{
			iRow=(i+struScrMsp.iBaseRow)%24;
			iNextRow=(iRow+1)%24;
			for(j=0;j<iWidth;j++)
			{
				ScreenBuf[iNextRow][j].ch =ScreenBuf[iRow][j].ch ;
				ScreenBuf[iNextRow][j].iFan =ScreenBuf[iRow][j].iFan ;
				ScreenBuf[iNextRow][j].iType  =ScreenBuf[iRow][j].iType  ;
			}
		}


		ClearBuf(iTopRow ,0,iTopRow ,iWidth-1);
		Refresh(iTopRow ,0,iButtomRow ,iWidth-1);
	}

	return 0;
	
}

///显示字符串
int Display(char *szTmp)
{
	unsigned  int i,j;//循环变量
//	char szDispBuf[81];//显示缓冲区
	int iFan;//显示反向标志
	int iType;//显示字符类型
	int iCurrRow;//显示的行
	int iStartCol,iEndCol;//显示起始列、结束列

//	SetCursorHide();

	iFan=struCharProp.iDisplay;
	iType=struScrMsp.iCharSet;
	
	iCurrRow=struScrMsp.iYPos ;
	iStartCol=struScrMsp.iXPos;
	iEndCol=struScrMsp.iXPos;

//	memset(szDispBuf,0x00,sizeof(szDispBuf));
	for (i=0; i<strlen(szTmp); i++)
	{
		switch (szTmp[i])
		{

		case '\xff':
			break;

		case '\x0d'://回车
//			ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
			Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol-1);
			CursorMoveTo(struScrMsp.iYPos ,0);
			iCurrRow=struScrMsp.iYPos ;

//			memset(szDispBuf,0x00,sizeof(szDispBuf));
			iFan=struCharProp.iDisplay;
			iType=struScrMsp.iCharSet;
			iStartCol=struScrMsp.iXPos;
			iEndCol=struScrMsp.iXPos ;
			bHz=0;

			break;

		case '\x0a'://换行
			
//			ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
			Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol);

			if (struScrMsp.iYPos <struScrMsp.iButtomRow)//光标下移
				CursorMoveTo(struScrMsp.iYPos+1,struScrMsp.iXPos );
			else//滚屏
				ScreenRollUp();

			iCurrRow=struScrMsp.iYPos ;

//			memset(szDispBuf,0x00,sizeof(szDispBuf));
			iFan=struCharProp.iDisplay;
			iType=struScrMsp.iCharSet;
			iStartCol=struScrMsp.iXPos;
			iEndCol=struScrMsp.iXPos ;
			bHz=0;
			break;

		case '\x08'://BackSpace
//			ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
			Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol);

			if (struScrMsp.iXPos>0)
				CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos -1);
			iCurrRow=struScrMsp.iYPos ;

//			memset(szDispBuf,0x00,sizeof(szDispBuf));
			iFan=struCharProp.iDisplay;
			iType=struScrMsp.iCharSet;
			iStartCol=struScrMsp.iXPos;
			iEndCol=struScrMsp.iXPos ;
			bHz=0;
			break;

		case '\x09'://Tab
//			ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
			Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol-1);

			j=struScrMsp.iXPos+1;
			while (struScrMsp.iArrTab [j]==0 && j<iWidth-1) j++;
			CursorMoveTo(struScrMsp.iYPos ,j);

			iCurrRow=struScrMsp.iYPos ;

//			memset(szDispBuf,0x00,sizeof(szDispBuf));
			iFan=struCharProp.iDisplay;
			iType=struScrMsp.iCharSet;
			iStartCol=struScrMsp.iXPos;
			iEndCol=struScrMsp.iXPos ;
			bHz=0;
			break;

		case '\x07'://响铃
//			ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
			Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol);

			CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos);//strlen(szDispBuf));
			iCurrRow=struScrMsp.iYPos ;

#ifndef UNICODE
			Beep(1000,100);
#endif
//			memset(szDispBuf,0x00,sizeof(szDispBuf));
			iFan=struCharProp.iDisplay;
			iType=struScrMsp.iCharSet;
			iStartCol=struScrMsp.iXPos;
			iEndCol=struScrMsp.iXPos ;
			
			bHz=0;

			break;

		case '\x0e'://G1->GL
//			ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
			Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol);

			CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos );//strlen(szDispBuf));
			iCurrRow=struScrMsp.iYPos ;

//			memset(szDispBuf,0x00,sizeof(szDispBuf));
			iFan=struCharProp.iDisplay;
			iType=G1;
			iStartCol=struScrMsp.iXPos;
			iEndCol=struScrMsp.iXPos ;

			struScrMsp.iCharSet=G1;
			bHz=0;
			break;

		case '\x0f'://G0->GL
//			ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
			Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol);

			CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos );//strlen(szDispBuf));
			iCurrRow=struScrMsp.iYPos ;
			
//			memset(szDispBuf,0x00,sizeof(szDispBuf));
			iFan=struCharProp.iDisplay;
			iType=G0;
			iStartCol=struScrMsp.iXPos;
			iEndCol=struScrMsp.iXPos ;

			struScrMsp.iCharSet=G0;
			bHz=0;
			break;

		default:
			if (szTmp[i]>='\x00' && szTmp[i]<'\x20') 
			{
				bHz=0;
				break;
			}

			if ((szTmp[i]>='\x20' && szTmp[i]!='\x7f' && bHz==0) || (szTmp[i]<'\x40' && szTmp[i]>='\x20'))//普通字符
			{
				int Row,Col;

				Row=(struScrMsp.iYPos+struScrMsp.iBaseRow)%24;
				if (struScrMsp.iXPos<iWidth-1)
				{
					Col=struScrMsp.iXPos++;
					iEndCol++;
				}
				else
					Col=struScrMsp.iXPos;
//				szDispBuf[strlen(szDispBuf)]=szTmp[i];
				ScreenBuf[Row][Col].ch =szTmp[i];
				ScreenBuf[Row][Col].iFan =iFan;
				ScreenBuf[Row][Col].iType =iType;
				ScreenBuf[Row][Col].iULine=struCharProp.iUnderLine;
				ScreenBuf[Row][Col].iHighLight=struCharProp.iLight;
				bHz=0;

			}
			else//汉字
			{
				if (szTmp[i]<0 || bHz==1 )
				{
					int Row,Col;

					Row=(struScrMsp.iYPos+struScrMsp.iBaseRow)%24;
					if (struScrMsp.iXPos<iWidth-1)
					{
						Col=struScrMsp.iXPos++;
						iEndCol++;
					}
					else
						Col=struScrMsp.iXPos;
					ScreenBuf[Row][Col].ch =szTmp[i];
					ScreenBuf[Row][Col].iFan =iFan;
					ScreenBuf[Row][Col].iType =1;
					ScreenBuf[Row][Col].iULine=struCharProp.iUnderLine;
					ScreenBuf[Row][Col].iHighLight=struCharProp.iLight;
					if (bHz==1)
						bHz=0;
					else
						bHz=1;
				}
			}
				

			break;
		}

	}
	
//	ShowText(struScrMsp.iYPos ,iStartCol,iType,iFan,szDispBuf);//显示缓冲区已有字符
	Refresh(iCurrRow,iStartCol,iCurrRow,iEndCol-1);

//	MoveTo(struScrMsp.iYPos ,struScrMsp.iXPos +iEndCol-iStartCol);//strlen(szDispBuf));
	CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos);

//	SetCursorDisplay();

	return 0;

}

⌨️ 快捷键说明

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