1 Star 0 Fork 0

soui3-demo/SlogViewer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
SColorizeText.cpp 1.73 KB
一键复制 编辑 原始数据 按行查看 历史
#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();
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/soui3-demo/SlogViewer.git
git@gitee.com:soui3-demo/SlogViewer.git
soui3-demo
SlogViewer
SlogViewer
master

搜索帮助