代码拉取完成,页面将自动刷新
#include "StdAfx.h"
#include "SColorizeText.h"
namespace SOUI
{
SColorizeText::SColorizeText(void)
{
}
SColorizeText::~SColorizeText(void)
{
}
void SColorizeText::DrawText(IRenderTarget *pRT,LPCTSTR pszBuf,int cchText,LPRECT pRect,UINT uFormat)
{
if(uFormat & DT_CALCRECT)
{
__super::DrawText(pRT,pszBuf,cchText,pRect,uFormat);
return;
}
if(!(uFormat&DT_SINGLELINE)) return;
if(cchText==-1) cchText=_tcslen(pszBuf);
COLORREF crDef = pRT->GetTextColor();
SArray<COLORIZEINFO> lstInfo;
int iBegin=0;
for(int i=0;i<(int)m_lstColorizeInfo.GetCount();i++)
{
COLORIZEINFO info = m_lstColorizeInfo[i];
if(info.iBegin>iBegin)
{
COLORIZEINFO infoDef={iBegin,info.iBegin,crDef};
lstInfo.Add(infoDef);
}
lstInfo.Add(info);
iBegin = info.iEnd;
}
if(iBegin<cchText)
{
COLORIZEINFO info={iBegin,cchText,crDef};
lstInfo.Add(info);
}
int x=pRect->left;
int y=pRect->top;
for(int i=0;i<(int)lstInfo.GetCount();i++)
{
const COLORIZEINFO & info = lstInfo[i];
pRT->SetTextColor(info.cr);
LPCTSTR p1=pszBuf+info.iBegin;
SIZE szSeg={0};
pRT->MeasureText(p1,info.iEnd-info.iBegin,&szSeg);
pRT->TextOut(x,y,p1,info.iEnd-info.iBegin);
x += szSeg.cx;
}
pRT->SetTextColor(crDef);
}
void SColorizeText::ClearColorizeInfo()
{
m_lstColorizeInfo.RemoveAll();
Invalidate();
}
void SColorizeText::AddColorizeInfo(int iBegin,int iEnd,COLORREF cr)
{
COLORIZEINFO info={iBegin,iEnd,cr};
if(!m_lstColorizeInfo.IsEmpty())
{//确保是按顺序设置
if(iBegin<m_lstColorizeInfo[m_lstColorizeInfo.GetCount()-1].iEnd)
return;
}
m_lstColorizeInfo.Add(info);
Invalidate();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。