effectchang.cpp
来自「一个通过PCI卡向LED屏发送股票实时行情的系统」· C++ 代码 · 共 1,278 行 · 第 1/3 页
CPP
1,278 行
SingleChar=CurStr.GetAt(count);
if(SingleChar&0x80)
{
Chine_count++; //一行中,中文字符计数
bchine=TRUE;
}
else
bchine=FALSE;
strSize=pMemDC->GetTextExtent(CurStr.Left(count+1));
if(strSize.cx>dw)
{
if(bchine)
{
if(Chine_count%2)//奇数,有中文字符被拆开
count--;
}
else
count--;
break;
}
}
WantStr=CurStr.Left(count);
//输出一行满宽文本
if(nLineCount*(nLineSpace+lp.lfHeight)<=dh-nLineSpace-lp.lfHeight)
{
pMemDC->TextOut(dx,nLineCount*(nLineSpace+lp.lfHeight),WantStr);//190
pDC->BitBlt(dx,dy,dw,dh,pMemDC,0,0,SRCCOPY);
}
else
{
// DynamicShow_Interface(pWnd,2,pDC,pMemDC,dx,dy,dw,dh,0,0,0,0);
Sleep(theApp.TxtPauseTime*1000);
pMemDC->FillSolidRect(CRect(0,0,dw,dh),RGB(0,0,0));
pMemDC->TextOut(dx,0,WantStr);
nLineCount=0;
pDC->BitBlt(dx,dy,dw,dh,pMemDC,0,0,SRCCOPY);
}
///////////////////////
if(count<CurLen)
{//再测量一次WantStr的最后一个字符
SingleChar=CurStr.GetAt(count);
if(SingleChar&0x80)
bchine=TRUE;
else
bchine=FALSE;
}
if(bchine)
CurStr=CurStr.Right(CurLen-count+1);
else
CurStr=CurStr.Right(CurLen-count);
if(count==1) CurStr="";
CurLen=CurStr.GetLength();
Chine_count=0;
nLineCount++;
}while(CurStr!="");
}
}
TxtFile.Close();
//收拾设备描述表
pMemDC->SelectObject(m_FntOld);
pMemDC->SelectObject(pOldbmp);
m_bmp.DeleteObject();
pMemDC->DeleteDC();
delete pMemDC;
return 1;
}
//上滚
//(dx,dy,dw,dh)目标屏幕的坐标,位图文件名,动画模式,宋体字号,源屏幕的坐标
BOOL CEffectChang::Open_DrawTxt3(CWnd* pWnd,CDC *pDC,
int dx, int dy, int dw, int dh,
CString fName,int DisplayMode,CFont* mTxtFnt)
{
CString Txtstr;
int nLineSpace=0; //行间距
CStdioFile TxtFile;
if (!TxtFile.Open(fName,CFile::modeRead|CFile::typeText|CFile::shareDenyNone))
return 0;
//新的内存
CFont* m_FntOld;
CDC* pMemDC;
CBitmap m_bmp;
CBitmap* pOldbmp;
LOGFONT lp;
pMemDC=new CDC;
pMemDC->CreateCompatibleDC(pDC);
m_bmp.CreateCompatibleBitmap(pDC,dw,dh);
pOldbmp=pMemDC->SelectObject(&m_bmp);
pMemDC->FillSolidRect(CRect(0,0,dw,dh),RGB(0,0,0));
pMemDC->SetBkColor(RGB(0,0,0));
pMemDC->SetTextColor(RGB(255,0,0));
m_FntOld=pMemDC->SelectObject(mTxtFnt);
mTxtFnt->GetLogFont(&lp);
BOOL bOnePage=FALSE;
int nLineCount=0;
CSize strSize;
TCHAR SingleChar;
CString ToNextLine="";
BOOL bchine;
CString WantStr,CurStr;
int Chine_count;
int CurLen;
while(TxtFile.ReadString(Txtstr))
{
// Txtstr.TrimRight();
if(!Txtstr.IsEmpty())
{
CurStr=ToNextLine+Txtstr;
bchine=FALSE;
Chine_count=0;
CurLen=Txtstr.GetLength();
//分解一行文本
do
{
for(int count=0;count<CurLen;count++)
{
SingleChar=CurStr.GetAt(count);
if(SingleChar&0x80)
{
Chine_count++; //一行中,中文字符计数
bchine=TRUE;
}
else
bchine=FALSE;
strSize=pMemDC->GetTextExtent(CurStr.Left(count+1));
if(strSize.cx>dw)
{
if(bchine)
{
if(Chine_count%2)//奇数,有中文字符被拆开
count--;
}
else
count--;
break;
}
}
WantStr=CurStr.Left(count);
if((nLineCount*lp.lfHeight<=dh-lp.lfHeight)&&!bOnePage)
{//先打出一页,
// pMemDC->FillSolidRect(CRect(0,0,dw,lp.lfHeight),RGB(0,0,0));
pMemDC->TextOut(dx,nLineCount*lp.lfHeight,WantStr);
pDC->BitBlt(dx,dy,dw,dh,pMemDC,0,0,SRCCOPY);
}
else
{//超过一页以后再逐行上滚
if(!bOnePage)
Sleep(theApp.TxtPauseTime*1000);
bOnePage=TRUE;
//输出一行满宽文本
pMemDC->FillSolidRect(CRect(0,0,dw,lp.lfHeight),RGB(0,0,0));
pMemDC->TextOut(0,0,WantStr);
for(int i=0;i<lp.lfHeight;i++)
{
pDC->OffsetViewportOrg(0,lp.lfHeight-i);
pWnd->UpdateWindow();
pWnd->ScrollWindow(0,-1,CRect(dx,dy,dx+dw,dy+dh),NULL);
pDC->BitBlt( dx,dh+dy-lp.lfHeight, dw, lp.lfHeight, pMemDC, 0, 0, SRCCOPY );
pDC->SetViewportOrg(0,0);
Sleep(60);
}
}
///////////////////////
if(count<CurLen)
{//再测量一次WantStr的最后一个字符
SingleChar=CurStr.GetAt(count);
if(SingleChar&0x80)
bchine=TRUE;
else
bchine=FALSE;
}
if(bchine)
CurStr=CurStr.Right(CurLen-count+1);
else
CurStr=CurStr.Right(CurLen-count);
if(count==1) CurStr="";
CurLen=CurStr.GetLength();
Chine_count=0;
nLineCount++;
}while(CurStr!="");
}
}
TxtFile.Close();
if(!bOnePage)
Sleep(theApp.TxtPauseTime*1000);//不超过一页
else
{//超过一页,总是移走满平屏,15行
pMemDC->FillSolidRect(CRect(0,0,dw,lp.lfHeight),RGB(0,0,0));
for(int j=0;j<15;j++)
{
for(int i=0;i<lp.lfHeight;i++)
{
pDC->OffsetViewportOrg(0,lp.lfHeight-i);
pWnd->UpdateWindow();
pWnd->ScrollWindow(0,-1,CRect(dx,dy,dx+dw,dy+dh),NULL);
pDC->BitBlt( dx,dh+dy-lp.lfHeight, dw, lp.lfHeight, pMemDC, 0, 0, SRCCOPY );
pDC->SetViewportOrg(0,0);
Sleep(60);
}
}
}
//收拾设备描述表
pMemDC->SelectObject(m_FntOld);
pMemDC->SelectObject(pOldbmp);
m_bmp.DeleteObject();
pMemDC->DeleteDC();
delete pMemDC;
return 1;
}
void CEffectChang::OnePage_Displaystr(CDC* pDC,CDC* pMDC,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)
{
pDC->StretchBlt( dx,dy,dw,dh,pMDC,sx,sy,sw,sh,SRCCOPY);
}
void CEffectChang::OnePage_Display(CDC* pDC,CDC* pMDC,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh)
{
pDC->BitBlt(dx,dy,dw,dh,pMDC,sx,sy,SRCCOPY);
}
BOOL CEffectChang::MoveEffect2(CWnd* pWnd,CDC* pDC,CDC* pMDC,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //下移入
{
for(int i=0;i<dh;i+=2)
{
pWnd->UpdateWindow();
pWnd->ScrollWindow(0,-2,NULL,NULL);
pDC->OffsetViewportOrg(0,dh-i);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SetViewportOrg(0,0);
}
return 1;
}
BOOL CEffectChang::MoveEffect3(CWnd* pWnd,CDC* pDC,CDC* pMDC,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //下移入
{
for(int i=0;i<dw;i+=2)
{
pWnd->UpdateWindow();
pWnd->ScrollWindow(2,0,NULL,NULL);
pDC->OffsetViewportOrg(-dw+i,0);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SetViewportOrg(0,0);
}
return 1;
}
BOOL CEffectChang::MoveEffect4(CWnd* pWnd,CDC* pDC,CDC* pMDC,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //下移入
{
for(int i=0;i<dw;i+=2)
{
pWnd->UpdateWindow();
pWnd->ScrollWindow(-2,0,NULL,NULL);
pDC->OffsetViewportOrg(dw-i,0);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SetViewportOrg(0,0);
}
return 1;
}
BOOL CEffectChang::MoveEffect5(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //左上角移入
{
for(int i=0;i<dw;i++)
{
pDC->OffsetViewportOrg(-dw+i,-dh+i*dh/dw);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SetViewportOrg(0,0);
}
return 1;
}
BOOL CEffectChang::MoveEffect6(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //左下角移入
{
for(int i=0;i<dw;i++)
{
pDC->OffsetViewportOrg(-dw+i,dh-i*dh/dw);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SetViewportOrg(0,0);
}
return 1;
}
BOOL CEffectChang::MoveEffect7(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //右上角移入
{
for(int i=0;i<dw;i++)
{
pDC->OffsetViewportOrg(dw-i,-dh+i*dh/dw);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SetViewportOrg(0,0);
}
return 1;
}
BOOL CEffectChang::MoveEffect8(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //右下角移入
{
for(int i=0;i<dw;i++)
{
pDC->OffsetViewportOrg(dw-i,dh-i*dh/dw);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SetViewportOrg(0,0);
}
return 1;
}
BOOL CEffectChang::ThreadEffect1(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];
point[0].x=0;
point[0].y=0;
point[1].x=dw;
point[1].y=0;
point[2].x=dw;
point[2].y=2;
point[3].x=0;
point[3].y=2;
Rgn1.CreatePolygonRgn(point,4,WINDING);
pDC->SelectClipRgn(&Rgn1);
for(int j=0;j<100;j++)
{
for(int i=0;i<500;i++)
{
pDC->OffsetClipRgn(0,2*(rand()%dh));
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
}
}
pDC->SelectClipRgn( NULL );
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SelectClipRgn( NULL );
Rgn1.DeleteObject();
return 1;
}
BOOL CEffectChang::ThreadEffect2(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];
point[0].x=0;
point[0].y=0;
point[1].x=2;
point[1].y=0;
point[2].x=2;
point[2].y=dh;
point[3].x=0;
point[3].y=dh;
Rgn1.CreatePolygonRgn(point,4,WINDING);
pDC->SelectClipRgn(&Rgn1);
for(int j=0;j<500;j++)
{
for(int i=0;i<500;i++)
{
pDC->OffsetClipRgn(1*(rand()%dw),0);
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
}
}
pDC->SelectClipRgn( NULL );
pDC->BitBlt( dx, dy, dw, dh, pMDC, sx, sy, SRCCOPY );
pDC->SelectClipRgn( NULL );
Rgn1.DeleteObject();
return 1;
}
BOOL CEffectChang::StretchEffect2(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 i=0;i<dw/2;i++)
{
point[0].x=dw/2-i;
point[0].y=dh/2-i*dh/dw;
point[1].x=dw/2+i;
point[1].y=dh/2-i*dh/dw;
point[2].x=dw/2+i;
point[2].y=dh/2+i*dh/dw;
point[3].x=dw/2-i;
point[3].y=dh/2+i*dh/dw;
Rgn1.CreatePolygonRgn(point,4,WINDING);
pDC->SelectClipRgn( &Rgn1 );
pDC->SetStretchBltMode(STRETCH_DELETESCANS);
pDC->StretchBlt(dw/2-i,dh/2-i*dh/dw,
2*i,2*i*dh/dw,
pMDC,0, 0, dw, dh,SRCCOPY );
pDC->SelectClipRgn( NULL );
Rgn1.DeleteObject();
}
return 0;
}
BOOL CEffectChang::StretchEffect1(CDC *pDC,CDC* pMDC ,int dx, int dy, int dw, int dh,int sx,int sy,int sw,int sh) //由大缩小
{
CRgn Rgn1,Rgn2,Rgn3,Rgn4;
CBrush *OldBrush;
COLORREF Color;
Color=RGB(60,60,60);
CBrush m_pBrush( Color );
OldBrush = (CBrush *) pDC->SelectObject( &m_pBrush );
Rgn1.CreateRectRgn(0 , 0, dw, dh);
Rgn3.CreateRectRgn(0, 0, 0, 0);
for(int i=0;i<dw/2;i++)
{
Rgn2.CreateRectRgn(i,i*dh/dw,dw-i,dh-i*dh/dw);
Rgn3.CombineRgn(&Rgn1,&Rgn2,RGN_DIFF);
pDC->FillRgn(&Rgn3,&m_pBrush);
pDC->SelectObject( OldBrush );
POINT point[4];
point[0].x=i;
point[0].y=i*dh/dw;
point[1].x=dw-i;
point[1].y=i*dh/dw;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?