📄 readtxt.cpp
字号:
continue;
}
else if(m_buf[kk]=='\n')
{
kk++;
goto ll;
}
if(m_buf[kk]=='@'&&m_buf[kk+2]=='['&&(m_buf[kk+4]==']'||m_buf[kk+5]==']'||
m_buf[kk+6]==']'||m_buf[kk+13]==']'))
{
kk++;
ch=tolower(m_buf[kk++]);
jj=0;
kk++;
while(m_buf[kk]!=']')
{
m_str1[jj++]=m_buf[kk];
kk++;
}
m_str1[jj]=0;
m_value=atol(m_str1);
HTime_start=m_str1;//wanli
kk++;
jj=0;
m_str1[0];
if(m_buf[kk]=='['&&(m_buf[kk+2]==']'||m_buf[kk+3]==']'||m_buf[kk+4]==']'||m_buf[kk+11]==']'))
{
kk++;
while(m_buf[kk]!=']')
{
m_str1[jj++]=m_buf[kk];
kk++;
}
m_str1[jj]=0;
HTime_end=m_str1;
kk++;
}
switch((int)ch)
{
case 't'://top txt
m_txt=(BYTE)m_value;
if(m_txt==0)
{
if(m_ptopdrawtxt)
{
m_hight+=(m_ptopdrawtxt->maxhight+m_ptopdrawtxt->space);
delete m_ptopdrawtxt;
m_ptopdrawtxt=NULL;
}
if(m_pbottomdrawtxt)
{
m_hight+=(m_pbottomdrawtxt->maxhight+m_pbottomdrawtxt->space);
delete m_pbottomdrawtxt;
m_pbottomdrawtxt=NULL;
}
int rt=m_topdrawtxtList.GetCount();
m_topdrawtxtList.RemoveAll();
m_bottomdrawtxtList.RemoveAll();
m_showrect=m_oldrect;
}
break;
case 'q'://no use
bClrScreen=TRUE;
break;
case 'b'://行间距
font_space=(WORD)m_value;
m_drawtxt->space=m_value;
break;
case 'c'://字体颜色
font_color=(BYTE)m_value;
if(old_colorcur!=m_cur)
{
CColorDraw * m_demo;
m_demo=new CColorDraw;
m_demo->m_curx=m_cur;
m_demo->m_color=(BYTE)m_value;
old_colorcur=m_cur;
m_drawtxt->m_colordrawlist.AddTail(m_demo);
}
old_colorcur=m_cur;
break;
case 'd': //延时-速度
font_delay=(BYTE)m_value;
break;
case 'y'://停顿时间
font_s=(BYTE)m_value;
break;
case 'f': //字体
font_name=(BYTE)m_value;
if(old_fontcur!=m_cur)
{
CFontDraw * m_demo;
m_demo=new CFontDraw;
m_demo->m_curx=m_cur;
m_demo->m_name=(BYTE)m_value;
old_fontcur=m_cur;
m_drawtxt->m_fontdrawlist.AddTail(m_demo);
}
old_fontcur=m_cur;
break;
case 'm'://模式
font_mode=(BYTE)m_value;
goto llll;//设置了模式控制
break;
case 's': //字体尺寸
font_width=(BYTE)m_value/2;
if(strlen(m_str1)>0)
font_hight=atoi(m_str1);
else
font_hight=(BYTE)m_value;
font_hight=atoi(m_str1);//???
if(font_hight>m_hight)
goto lll;//字体高于屏高
if(font_hight>m_drawtxt->maxhight)
m_drawtxt->maxhight=font_hight;
if(m_cur!=old_fontsize)
{
CFontSizeDraw * m_demo;
m_demo=new CFontSizeDraw;
m_demo->m_curx=m_cur;
m_demo->m_cx=font_width;
m_demo->m_cy=font_hight;
m_drawtxt->m_fontsizelist.AddTail(m_demo);
}
old_fontsize=m_cur;
break;
case 'h': //定时控制
if(!OnCheckTxtPlayTime(HTime_start,HTime_end))
return -1;//当前时间不许播放
break;
}
}
else
{//无任何控制符时
if(m_hight<m_drawtxt->maxhight)
goto ll;
if(m_cur==0)
{
CFontDraw * m_demofont;
m_demofont=new CFontDraw;
m_demofont->m_curx=0;
m_demofont->m_name=font_name;
m_drawtxt->m_fontdrawlist.AddTail(m_demofont);
CColorDraw * m_democolor;
m_democolor=new CColorDraw;
m_democolor->m_curx=0;
m_democolor->m_color=font_color;
m_drawtxt->m_colordrawlist.AddTail(m_democolor);
CFontSizeDraw * m_demosize;
m_demosize=new CFontSizeDraw;
m_demosize->m_curx=0;
m_demosize->m_cx=font_width;
m_demosize->m_cy=font_hight;
m_drawtxt->m_fontsizelist.AddTail(m_demosize);
}
if (m_buf[kk]&0x80)
{
if(((cur_len+2*font_width)<=m_len)||m_txt>0)
{
m_str[m_cur++]=m_buf[kk++];
m_str[m_cur++]=m_buf[kk++];
cur_len+=2*font_width;
}
else
goto lll; //return TRUE;
}
else
{
if(((cur_len+font_width)<=m_len)||m_txt>0)
{
m_str[m_cur++]=m_buf[kk++];
cur_len+=font_width;
}
else
goto lll; //return TRUE;
}
}
}//end while
lll://字体高于屏高
if(m_buf[kk]=='\r'||m_buf[kk]=='\n')
kk++;
if(m_buf[kk]=='\r'||m_buf[kk]=='\n')
kk++;
ll: //一般
m_txtfile.Seek(-(len-kk),CFile::current);
////////////////////////////wanli
Duan_len=kk;
if(len==0)
Duan_len=m_showrect.Width()/font_width;
////////////////////////////
m_str[m_cur]=0;
m_drawtxt->m_showstr=m_str;
if(m_cur==0&&kk>2)
return 0;
if(m_cur==0&&kk<=2&&m_hight<m_drawtxt->maxhight)
return -1;
return 1;
llll://设置了模式控制
if(m_buf[kk]=='\r'||m_buf[kk]=='\n')
kk++;
if(m_buf[kk]=='\r'||m_buf[kk]=='\n')
kk++;
m_txtfile.Seek(-(len-kk),CFile::current);
if(m_cur==0)
return 0;
m_str[m_cur]=0;
m_drawtxt->m_showstr=m_str;
return 2;
}
BOOL CShowTxt::OnCheckTxtPlayTime(CString Time_start, CString Time_end)//wanli
{
CString str1,str2;
TCHAR buf[256];
VERIFY(GetDateFormat(LOCALE_SYSTEM_DEFAULT,0,NULL,"MM/dd",buf,256));
str1=buf;
VERIFY(GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0,NULL,"HH:mm",buf,256));
str2=buf;
str1+=str2;
if(str1>=Time_start&&str1<Time_end)
return TRUE;
else
return FALSE;
}
void CShowTxt::CheckMode(CDrawTxt *m_drawtxt)
{
int ii,jj,len, m_cur;
CShowDraw* m_demoshowdraw;
CFontDraw* m_demofontdraw;
CFontSizeDraw* m_demofontsize;
CColorDraw* m_democolordraw;
POSITION m_pos;
BYTE m_str[1024];
BYTE m_colorstr[1024];
BYTE m_fontstr[1024];
BYTE m_sizestr[1024];
memset(m_str,0,1024);
memset(m_fontstr,0,1024);
memset(m_colorstr,0,1024);
memset(m_sizestr,0,1024);
for(ii=0;ii<m_drawtxt->m_fontdrawlist.GetCount();ii++)
{
m_pos=m_drawtxt->m_fontdrawlist.FindIndex(ii);
m_demofontdraw=(CFontDraw *)m_drawtxt->m_fontdrawlist.GetAt(m_pos);
m_str[m_demofontdraw->m_curx]=1;
m_cur=m_demofontdraw->m_curx;
if(ii==(m_drawtxt->m_fontdrawlist.GetCount()-1))
len=m_drawtxt->m_showstr.GetLength();
else
{
m_pos=m_drawtxt->m_fontdrawlist.FindIndex(ii+1);
m_demofontdraw=(CFontDraw *)m_drawtxt->m_fontdrawlist.GetAt(m_pos);
len=m_demofontdraw->m_curx;
}
for(jj=m_cur;jj<len;jj++)
m_fontstr[jj]=ii;
}
for(ii=0;ii<m_drawtxt->m_fontsizelist.GetCount();ii++)
{
m_pos=m_drawtxt->m_fontsizelist.FindIndex(ii);
m_demofontsize=(CFontSizeDraw *)m_drawtxt->m_fontsizelist.GetAt(m_pos);
m_str[m_demofontsize->m_curx]=1;
m_cur=m_demofontsize->m_curx;
if(ii==(m_drawtxt->m_fontsizelist.GetCount()-1))
len=m_drawtxt->m_showstr.GetLength();
else
{
m_pos=m_drawtxt->m_fontsizelist.FindIndex(ii+1);
m_demofontsize=(CFontSizeDraw *)m_drawtxt->m_fontsizelist.GetAt(m_pos);
len=m_demofontsize->m_curx;
}
for(jj=m_cur;jj<len;jj++)
m_sizestr[jj]=ii;
}
for(ii=0;ii<m_drawtxt->m_colordrawlist.GetCount();ii++)
{
m_pos=m_drawtxt->m_colordrawlist.FindIndex(ii);
m_democolordraw=(CColorDraw *)m_drawtxt->m_fontdrawlist.GetAt(m_pos);
m_str[m_democolordraw->m_curx]=1;
m_cur=m_democolordraw->m_curx;
if(ii==(m_drawtxt->m_colordrawlist.GetCount()-1))
len=m_drawtxt->m_showstr.GetLength();
else
{
m_pos=m_drawtxt->m_colordrawlist.FindIndex(ii+1);
m_democolordraw=(CColorDraw *)m_drawtxt->m_colordrawlist.GetAt(m_pos);
len=m_democolordraw->m_curx;
}
for(jj=m_cur;jj<len;jj++)
m_colorstr[jj]=ii;
}
for(ii=0;ii<m_drawtxt->m_showstr.GetLength();ii++)
{
if(m_str[ii]==1)
{
m_demoshowdraw=new CShowDraw;
m_pos=m_drawtxt->m_fontdrawlist.FindIndex(m_fontstr[ii]);
m_demofontdraw=(CFontDraw *)m_drawtxt->m_fontdrawlist.GetAt(m_pos);
m_demoshowdraw->m_curx=ii;
m_demoshowdraw->m_name=m_demofontdraw->m_name;
m_pos=m_drawtxt->m_fontsizelist.FindIndex(m_sizestr[ii]);
m_demofontsize=(CFontSizeDraw *)m_drawtxt->m_fontsizelist.GetAt(m_pos);
m_demoshowdraw->m_cx=m_demofontsize->m_cx;
m_demoshowdraw->m_cy=m_demofontsize->m_cy;
m_pos=m_drawtxt->m_colordrawlist.FindIndex(m_colorstr[ii]);
m_democolordraw=(CColorDraw *)m_drawtxt->m_colordrawlist.GetAt(m_pos);
m_demoshowdraw->m_color=m_democolordraw->m_color;
m_drawtxt->m_showdrawlist.AddTail(m_demoshowdraw);
}
}
}
void CShowTxt::ToMemDC(CDC * m_pmemdc,BOOL b_pos,WORD m_scale,BYTE m_color)
{
int m_off=0;
CDrawTxt* m_demo;
POSITION m_pos;
// POSITION m_strpos;
int ii;
CRect m_rc;
CBrush m_brush;
m_brush.CreateSolidBrush(RGB(0,0,0));
m_rc.SetRect(0,0,m_showrect.Width(),m_showrect.Height());//??? not Height()
m_pmemdc->FillRect(m_rc,&m_brush);
if(b_pos==TRUE)
{
m_pos=m_listdrawtxt.GetHeadPosition();
while(m_pos)
{
m_demo=(CDrawTxt*)m_listdrawtxt.GetNext(m_pos);
if(m_scale==1)
m_off+=(m_demo->maxhight+m_demo->space);
else
m_off+=(int)(((m_demo->maxhight)/((float)m_scale/100)))/2*2;
}
m_off=(m_showrect.Height()-m_off)/2;
}
else{
m_off=0;
}
if(m_off<0) m_off=0;
//m_off+=m_showrect.top;
for(ii=0;ii<m_listdrawtxt.GetCount();ii++)
{
m_pos=m_listdrawtxt.FindIndex(ii);
m_demo=(CDrawTxt *)m_listdrawtxt.GetAt(m_pos);
ToOneTxtMemDC(m_pmemdc,m_demo,0,m_off,m_color,m_scale,0);
//ToOneTxtMemDC(m_pmemdc,m_demo,m_scale==1?0:(m_showrect.Width()*(1-1/((float)m_scale/100))/2)/2*2,m_off,m_color,m_scale,0);
// m_off+=m_demo->maxhight/m_scale;
m_off+=(m_demo->maxhight+m_demo->space)/m_scale;///////行间距
}
}
void CShowTxt::ToOneTxtMemDC(CDC * m_pmemdc,CDrawTxt* m_demo,int m_x,int m_off,BYTE m_color,WORD m_scale,BYTE m_c)
{
int jj;
int cur_x;
POSITION m_strpos;
CShowDraw* m_demostr;
POSITION m_pos;
CFont* m_pfont;
CFont* m_poldfont;
CString m_str;
CString m_str1;
CString m_str2;
BYTE color=1;
int cur_pos;
int cur_len;
if(bClrScreen)
{
CRect m_rc;
CBrush m_brush;
CDC * m_dc;
m_dc=m_pshowwnd->GetDC();
m_brush.CreateSolidBrush(RGB(0,0,0));
m_rc.SetRect(0,0,m_size.cx,m_size.cy);
m_dc->FillRect(m_rc,&m_brush);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -