多种颜色的文本内容如何显示

wld2003 2009-01-01 12:57:23
我现在有这么些代码,
void CXXX::OnDraw(CDC *pDC)
{
RECT rcTemp;
memset(&rcTemp, 0, sizeof(RECT));
::CopyRect(&rcTemp, &(rcTextArray[i]));
SAFE_CHECKWND(pTargetWnd)
{
this->ClientToScreen(&rcTemp);
pTargetWnd->ScreenToClient(&rcTemp);
}
char buffer[256];
memset(buffer, 0, sizeof(char) * 256);
CString name;
name = "中国大家";
wsprintf(buffer, "%s", name);
pDC->SetTextColor(RGB(51,255,255));
pDC->DrawText(buffer, &rcTemp, DT_WORDBREAK);
}

这样显示的字只是一种颜色,要是“中国大家”这四个字用不同的颜色显示,该如何做。谢谢大家。
...全文
635 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wld2003 2009-01-14
  • 打赏
  • 举报
回复
啊啊啊!
wld2003 2009-01-12
  • 打赏
  • 举报
回复
晕。。
wld2003 2009-01-08
  • 打赏
  • 举报
回复
自己顶。。
kuangkaiyi 2009-01-05
  • 打赏
  • 举报
回复
可以考虑一下用第三方的软件来实现啊,比如说BCGP10等
mma135 2009-01-05
  • 打赏
  • 举报
回复
不懂,帮顶
success000 2009-01-05
  • 打赏
  • 举报
回复
不懂,帮顶
wld2003 2009-01-05
  • 打赏
  • 举报
回复
Unicode如何用,有例子吗。谢谢。
cnzdgs 2009-01-04
  • 打赏
  • 举报
回复
用Unicode比较简单,一个WCHAR就是一个字符。用多字节字符集可以逐个元素来判断,如果小于0,则该元素与其后面的元素共同组成一个汉字。
wld2003 2009-01-04
  • 打赏
  • 举报
回复
不是文本框,,
starytx 2009-01-04
  • 打赏
  • 举报
回复
如果是在文本框中显示,可以使用RichEdit控件
wld2003 2009-01-04
  • 打赏
  • 举报
回复
如果要显示的字符串为:a中b国c人,
3楼朋友的代码显示出来就会成乱码,,
像“a中b国c人”这个,a为一种颜色,中为一种颜色,b为一种颜色,。。。
如果是“a中国bc人”,a为一种颜色,中为一种颜色,国为一种颜色,bc为一种颜色,。。。
这个取到的两个字符是否完整的,该如何判断。谢谢。
lyserver 2009-01-02
  • 打赏
  • 举报
回复
记得GDI+里好像有渐变画刷,这样就可以不必分别为每个字设置颜色了。
zw0558 2009-01-02
  • 打赏
  • 举报
回复
CString name;
name = "中国大家";
CString temp;

temp = name.Mid(0,2);
pDC->SetTextColor(RGB(51,255,255));
pDC->TextOut(100,100,temp);

CSize size = pDC->GetOutputTextExtent(temp);//获得字符宽度
temp = name.Mid(2,2);
pDC->SetTextColor(RGB(51,255,100));
pDC->TextOut(100+size.cx,100,temp);

temp = name.Mid(4,2);
pDC->SetTextColor(RGB(100,100,100));
pDC->TextOut(100+size.cx*2,100,temp);

temp = name.Mid(6,2);
pDC->SetTextColor(RGB(151,50,100));
pDC->TextOut(100+size.cx*3,100,temp);
一名程序员 2009-01-02
  • 打赏
  • 举报
回复
以下代码显示一个“我”字,左右两半显示不同的颜色。希望对楼主有启发。
void CCharCurveView::MyDefault()
{
// TODO: Add your command handler code here
LOGFONT logFont;
memset(&logFont, 0, sizeof(logFont));
logFont.lfHeight = 400;
logFont.lfCharSet = GB2312_CHARSET;
strcpy(logFont.lfFaceName,_T("隶书"));
CFont font;
font.CreateFontIndirect(&logFont);
CClientDC dc(this);
CFont* pOldFont = dc.SelectObject(&font);
CString str = _T("我");
dc.BeginPath();
dc.TextOut(0,0,str);
dc.EndPath();

size = dc.GetTextExtent(str);
CRect rect(CPoint(0,0),size);

dc.SelectObject(pOldFont);
font.DeleteObject();

CRgn rgn;
CRgn rgnRect;
CRgn rgnResult;
rgnRect.CreateRectRgn(0,0,size.cx,size.cy);

rgnResult.CreateRectRgn(0,0,20,20);
rgn.CreateFromPath(&dc);
rgnResult.CombineRgn( &rgnRect, &rgn, RGN_DIFF );

CBrush* pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(GRAY_BRUSH));
CBrush* pBrush2 = CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH));
//dc.FillRgn(&rgnResult,pBrush);

CRgn rgnRectLeft;
rgnRectLeft.CreateRectRgn(0,0, size.cx/2, size.cy);
CRgn rgnRectRight;
rgnRectRight.CreateRectRgn(size.cx/2,0, size.cx,size.cy);
CRgn rgnResult2;
CRgn rgnResult3;
rgnResult2.CreateRectRgn(0,0,20,20);
rgnResult3.CreateRectRgn(0,0,20,20);

rgnResult2.CombineRgn(&rgnRectLeft,&rgnResult,RGN_AND);
rgnResult3.CombineRgn(&rgnRectRight,&rgnResult,RGN_AND);

dc.FillRgn(&rgnResult2,pBrush);

dc.FillRgn(&rgnResult3,pBrush2);
}
hityct1 2009-01-01
  • 打赏
  • 举报
回复

CString name;
name = "中国大家";
CString temp;

temp = name.Mid(0,2);
pDC->SetTextColor(RGB(51,255,255));
pDC->TextOut(100,100,temp);

CSize size = pDC->GetOutputTextExtent(temp);//获得字符宽度
temp = name.Mid(2,2);
pDC->SetTextColor(RGB(51,255,100));
pDC->TextOut(100+size.cx,100,temp);

temp = name.Mid(4,2);
pDC->SetTextColor(RGB(100,100,100));
pDC->TextOut(100+size.cx*2,100,temp);

temp = name.Mid(6,2);
pDC->SetTextColor(RGB(151,50,100));
pDC->TextOut(100+size.cx*3,100,temp);

wmpkumse 2009-01-01
  • 打赏
  • 举报
回复
有几个字符就分几次
要么就用RichEdit控件
oyljerry 2009-01-01
  • 打赏
  • 举报
回复
那希望怎么做?
wld2003 2009-01-01
  • 打赏
  • 举报
回复
呵呵,,分4次是不行的,,
菜牛 2009-01-01
  • 打赏
  • 举报
回复
分4次,每次先SetTextColor设置颜色,然后TextOut输出一个字。
加载更多回复(2)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧