2015-06-04 38 views
1

我使用ID3DXFont界面來繪製文本,並且完全適合我的需要,只要完整的字符串是單色。現在我想繪製一個字符串,但有多種顏色。例如「abc」,帶有紅色,b帶黃色等。 我知道我可以自己繪製每個字母,每次給出Color參數到DrawText。唯一的問題是,我不知道應該在每個字母后補償多少像素,因爲每個字母都有不同的寬度。硬編碼寬度並不是一個很好的解決方案。多種顏色的C++ DirectX DrawText

回答

1

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」是(通常)的非常薄的字形。另請注意,這假定只有一行文字。計算的矩形還包括高度,所以如果您正在執行多行,則還可以使用計算矩形的高度來偏移位置。