簡體   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