effectchang.cpp

来自「一个通过PCI卡向LED屏发送股票实时行情的系统」· C++ 代码 · 共 1,278 行 · 第 1/3 页

CPP
1,278
字号
		point[2].x=dw-i;         
		point[2].y=dh-i*dh/dw;
		point[3].x=i;
		point[3].y=dh-i*dh/dw;
		Rgn4.CreatePolygonRgn(point,4,WINDING);

		pDC->SelectClipRgn( &Rgn4 );

		pDC->SetStretchBltMode(STRETCH_DELETESCANS);
		pDC->StretchBlt(i,i*dh/dw,dw-2*i,
				 dh-2*i*dh/dw, 
				 pMDC,0,0,dw,dh, SRCCOPY   );
		pDC->SelectClipRgn( NULL );
		Rgn2.DeleteObject();
		Rgn4.DeleteObject();
	}
	pDC->SelectClipRgn( NULL );
	Rgn1.DeleteObject();
	Rgn3.DeleteObject();
	return 0;
}
BOOL CEffectChang::StretchEffect3(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//由大回原
{		
	CRgn Rgn1;
	int i=260,j;
	POINT point[4];
	j=(dh*i)/dw;

	for(int k=0;k<=i;k+=10)
	{

		point[0].x=-i+k;
		point[0].y=-j+k*dh/dw;
		point[1].x=dw+i-k;
		point[1].y=-j+k*dh/dw;
		point[2].x=dw+i-k;         
		point[2].y=dh+j-k*dh/dw;
		point[3].x=-i+k;
		point[3].y=dh+j-k*dh/dw;
		Rgn1.CreatePolygonRgn(point,4,WINDING);

		pDC->SelectClipRgn( &Rgn1 );
		pDC->SetStretchBltMode(STRETCH_DELETESCANS);
		pDC->StretchBlt(-i+k,-j+k*dh/dw,
				 dw+2*i-2*k,dh+2*j-2*k*dh/dw, 
				 pMDC,0, 0, dw, dh,SRCCOPY   );
	
		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;
}
BOOL CEffectChang::SpreadEffect1(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//中间展开
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<=dw/2;nStep++)
	{
		point[0].x=dw/2-nStep;
		point[0].y=0;
		point[1].x=dw/2+nStep;
		point[1].y=0;
		point[2].x=dw/2+nStep;         
		point[2].y=dh;
		point[3].x=dw/2-nStep;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );
			pDC->SetStretchBltMode(STRETCH_DELETESCANS);
			pDC->StretchBlt(dw/2-nStep,0,2*nStep,dh,pMDC,0,0,dw,dh, SRCCOPY);

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;

}

BOOL CEffectChang::ShowEffect1(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//中间展示
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<=dw/2;nStep++)
	{
		point[0].x=dw/2-nStep;
		point[0].y=0;
		point[1].x=dw/2+nStep;
		point[1].y=0;
		point[2].x=dw/2+nStep;         
		point[2].y=dh;
		point[3].x=dw/2-nStep;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );

			pDC->BitBlt( 0, 0, dw, dh, pMDC, 0, 0, SRCCOPY );

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;

}

BOOL CEffectChang::TurnEffect(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//弹簧
{	
/*	BOOL Flag=0;
	int  ReturnFlag=0;
    POINT point[4];
	CRgn Rgn1,Rgn2,Rgn3,Rgn4;

	Rgn1.CreateRectRgn(0 , 0, dw, dh);
	Rgn3.CreateRectRgn(0, 0, 0, 0);

	CBrush *OldBrush;
	COLORREF Color;
	Color=RGB(60,60,60);
	CBrush m_pBrush( Color );
	OldBrush = (CBrush *) pDC->SelectObject( &m_pBrush );


	Rgn2.CreateRectRgn(dw/2-nStep,0,dw/2+nStep,dh);
	Rgn3.CombineRgn(&Rgn1,&Rgn2,RGN_DIFF);
	pDC->FillRgn(&Rgn3,&m_pBrush );
	pDC->SelectObject( OldBrush );

	point[0].x=dw/2-nStep;
	point[0].y=0;
	point[1].x=dw/2+nStep;
	point[1].y=0;
	point[2].x=dw/2+nStep;         
	point[2].y=dh;
	point[3].x=dw/2-nStep;
	point[3].y=dh;
	Rgn4.CreatePolygonRgn(point,4,WINDING);

	pDC->SelectClipRgn( &Rgn4 );

		pDC->SetStretchBltMode(STRETCH_DELETESCANS);
//		pDC->StretchBlt(dw/2-nStep,0,2*nStep,dh,&WorkDC,0,0,-dw,dh, SRCCOPY);
		pDC->StretchBlt(dw/2-nStep,0,2*nStep,dh,&WorkDC,0,0,dw,dh, SRCCOPY);
	pDC->SelectClipRgn( NULL );
	Rgn2.DeleteObject();
	Rgn4.DeleteObject();
	if((nStep>dw/2-1)&&(!Flag)&&(ReturnFlag<2))	ReturnFlag++;
	if(ReturnFlag>=2)		{ReturnFlag=0;nStep=0;Flag=0;	return 1;}
	if(nStep>dw/2-1)	    Flag=TRUE;	
	if(nStep<15)		    Flag=FALSE;

	if(Flag)	 nStep=nStep-10;	//回缩
	if(!Flag)    nStep=nStep+10;	//舒展

	Rgn3.DeleteObject();
	Rgn1.DeleteObject();*/
	return 0;
}

BOOL CEffectChang::SpreadEffect2(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//左展开
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<=dw;nStep++)
	{
		point[0].x=0;
		point[0].y=0;
		point[1].x=nStep;
		point[1].y=0;
		point[2].x=nStep;         
		point[2].y=dh;
		point[3].x=0;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );
			pDC->SetStretchBltMode(STRETCH_DELETESCANS);
			pDC->StretchBlt(0,0,nStep,dh,pMDC,0,0,dw,dh, SRCCOPY);

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;

}
BOOL CEffectChang::SpreadEffect3(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//右展开
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<=dw;nStep++)
	{
		point[0].x=dw-nStep;
		point[0].y=0;
		point[1].x=dw;
		point[1].y=0;
		point[2].x=dw;         
		point[2].y=dh;
		point[3].x=dw-nStep;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );
			pDC->SetStretchBltMode(STRETCH_DELETESCANS);
			pDC->StretchBlt(dw-nStep,0,nStep,dh,pMDC,0,0,dw,dh, SRCCOPY);

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;

}
BOOL CEffectChang::SpreadEffect4(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//上展开
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<=dh;nStep++)
	{
		point[0].x=0;
		point[0].y=0;
		point[1].x=dw;
		point[1].y=0;
		point[2].x=dw;         
		point[2].y=nStep;
		point[3].x=0;
		point[3].y=nStep;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );
			pDC->SetStretchBltMode(STRETCH_DELETESCANS);
			pDC->StretchBlt(0,0,dw,nStep,pMDC,0,0,dw,dh, SRCCOPY);

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;

}
BOOL CEffectChang::SpreadEffect5(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//下展开
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<dh;nStep++)
	{
		point[0].x=0;
		point[0].y=dh-nStep;
		point[1].x=dw;
		point[1].y=dh-nStep;
		point[2].x=dw;         
		point[2].y=dh;
		point[3].x=0;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );
			pDC->SetStretchBltMode(STRETCH_DELETESCANS);
			pDC->StretchBlt(0,dh-nStep,dw,nStep,pMDC,0,0,dw,dh, SRCCOPY);

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;

}

BOOL CEffectChang::ShowEffect2(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//左展示
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<=dw;nStep++)
	{
		point[0].x=0;
		point[0].y=0;
		point[1].x=nStep;
		point[1].y=0;
		point[2].x=nStep;         
		point[2].y=dh;
		point[3].x=0;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);

		pDC->SelectClipRgn( &Rgn1 );
			pDC->BitBlt( 0, 0, dw, dh, pMDC, 0, 0, SRCCOPY );
		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;

}
BOOL CEffectChang::ShowEffect3(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//右展示
{	
	CRgn Rgn1;
    POINT point[4];
	
	for(int nStep=0;nStep<=dw;nStep++)
	{
		point[0].x=dw-nStep;
		point[0].y=0;
		point[1].x=dw;
		point[1].y=0;
		point[2].x=dw;         
		point[2].y=dh;
		point[3].x=dw-nStep;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );

			pDC->BitBlt( 0, 0, dw, dh, pMDC, 0, 0, SRCCOPY );

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}	
	return 0;
}
BOOL CEffectChang::ShowEffect4(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//上展示
{	
	CRgn Rgn1;
    POINT point[4];
	for(int nStep=0;nStep<=dh;nStep++)
	{
		point[0].x=0;
		point[0].y=0;
		point[1].x=dw;
		point[1].y=0;
		point[2].x=dw;         
		point[2].y=nStep;
		point[3].x=0;
		point[3].y=nStep;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );

			pDC->BitBlt( 0, 0, dw, dh, pMDC, 0, 0, SRCCOPY );

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;
}

BOOL CEffectChang::ShowEffect5(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//下展示
{	
	CRgn Rgn1;
    POINT point[4];

	for(int nStep=0;nStep<=dh;nStep++)
	{
		point[0].x=0;
		point[0].y=dh-nStep;
		point[1].x=dw;
		point[1].y=dh-nStep;
		point[2].x=dw;         
		point[2].y=dh;
		point[3].x=0;
		point[3].y=dh;
		Rgn1.CreatePolygonRgn(point,4,WINDING);


		pDC->SelectClipRgn( &Rgn1 );

		pDC->BitBlt( 0, 0, dw, dh, pMDC, 0, 0, SRCCOPY );

		pDC->SelectClipRgn( NULL );
		Rgn1.DeleteObject();
	}
	return 0;
}

BOOL CEffectChang::WindowsEffect1(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//垂直百叶
{	
    CRgn NumRgn[40];
	int AveWidth=dw/30;
	int i;
	for(int nStep=0;nStep<=AveWidth;nStep+=1)
	{
		for(i=0;i<40;i++)
		{
			NumRgn[i].CreateRectRgn( AveWidth*(i+1)-nStep, 0, AveWidth*(i+1), dh );
		}

		for(i=0;i<40;i++)
		{
			pDC->SelectClipRgn( &NumRgn[i] );
			pDC->BitBlt( 0, 0, dw, dh,pMDC, 0, 0, SRCCOPY );
		}

		pDC->SelectClipRgn( NULL );
		for(i=0;i<40;i++)		NumRgn[i].DeleteObject();
		Sleep(20);
	}
	return 0;

}
BOOL CEffectChang::WindowsEffect2(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)		//水平百叶
{	
    CRgn NumRgn[40];
	int AveHeight=dh/30;
	int i;
	for(int nStep=0;nStep<=AveHeight;nStep+=1)
	{
		for(i=0;i<40;i++)
		{
			NumRgn[i].CreateRectRgn(0, AveHeight*(i+1)-nStep, dw,AveHeight*(i+1));
		}

		for(i=0;i<40;i++)
		{
			pDC->SelectClipRgn( &NumRgn[i] );
			pDC->BitBlt( 0, 0, dw, dh,pMDC, 0, 0, SRCCOPY );
		}

		pDC->SelectClipRgn( NULL );
		for(i=0;i<40;i++)		NumRgn[i].DeleteObject();
		Sleep(20);
	}
	return 0;

}

⌨️ 快捷键说明

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