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 + -
显示快捷键?