繁体   English   中英

多种颜色的C ++ DirectX DrawText

[英]C++ DirectX DrawText in multiple colors

我使用ID3DXFont界面绘制文本,只要完整的字符串是单色的, 它就完全适合我的需要。 现在,我希望以多种颜色绘制一个字符串。 例如“ abc”,红色为a,黄色为b,等等。我知道我可以自己绘制每个字母,每次给DrawText提供不同的Color参数。 唯一的问题是,我不知道每个字母后应偏移多少像素,因为每个字母的宽度都不同。 硬编码宽度并不是一个好的解决方案。

ID3DXFont界面不允许您在DrawText的一次调用中绘制多种颜色。 但是,它可以使用DT_CALCRECT标志为您希望绘制的任何文本提供边界矩形,因此您无需对字体中特定字形的宽度进行硬编码。 这也意味着您可以切换字体和/或字体大小,而无需修改图形代码或对新宽度进行硬编码。 例如:

ID3DXFont* font = ...;
const char* strings[] = { "A", "i", "C" };
D3DCOLOR colors[] = { D3DCOLOR_ARGB(255, 255, 0, 0), D3DCOLOR_ARGB(255, 0, 255, 0), D3DCOLOR_ARGB(255, 0, 0, 255) };
RECT r = { 10,10,0,0}; // starting point
for (int i = 0; i < _countof(strings); ++i)
{
    font->DrawText(NULL, strings[i], -1, &r, DT_CALCRECT, 0);
    font->DrawText(NULL, strings[i], -1, &r, DT_NOCLIP, colors[i]);
    r.left = r.right; // offset for next character.
}

注意:在您的示例中,我使用了“ i”而不是“ b”,因为它使矩形很明显是正确的,因为“ i”(通常)是一个非常细的字形。 另请注意,这假设一行文本。 计算出的矩形还包括高度,因此,如果要进行多行处理,还可以使用计算出的矩形的高度来偏移位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM