2009-12-04 85 views
0

我在想,如果這是I3D3XFont::DrawTextW的問題,我把它傳遞給一個字符串,其中包含\t,它將擴展。但是,它並不總是正確地做到這一點。如果我打印出傳遞給它的相同字符串,則選項卡會正確擴展。例如,I3D3XFont :: DrawTextW - 擴展選項卡錯誤?

dxfont->DrawTextW(NULL, msg, wcslen(msg), &textbox, 
     DT_LEFT | DT_TOP | DT_EXPANDTABS, D3DCOLOR_ARGB(255, 180, 180, 180)); 

其中msg創建通過:

swprintf_s(temp, sizeof(temp), L"%s\t\t\t\t%i\t\t%i\t\t%s\t\t%i\n", 
     pList[x].name.c_str(), pList[x].kills, pList[x].deaths, wratio, 
     pList[x].suicides); 

,當打印到控制檯出來爲:

Bamrow<4x tab>0<2x tab>0<2x tab>N/A<2x tab>2 

但是,DrawTextW顯示爲

Bamrow<5x tab>0<2x tab>0<2x tab>N/A<2x tab>2 

有沒有其他人有這個問題e和/或知道解決方案?

+0

這是一個非常奇怪的轉變。是否有可能爲分析捕獲文本? – wallyk 2009-12-04 04:58:00

+0

我不這麼認爲。我有一行上面的文本(對於DrawText),它正確地分隔到4個標籤,並且此DrawText的輸出顯示名稱之後的數據一個標籤太遠。我包括<4x tab>等,因爲當我插入一個製表符時,發佈消息時並沒有顯示任何內容。 – DirectXFag 2009-12-04 05:09:06

+0

我會詳細說明一下。我有兩個可能的swprintf_s語句,如下所示。如果(len> = 8) swprintf_s(temp,sizeof(temp),L「%s \ t \ t \ t%i \ t \ t%i \ t \ t%s \ t \ t%i \ n「,pList [x] .name.c_str(),pList [x] .kills,pList [x] .deaths,wratio,pList [x] .suicides);其他 else swprintf_s(temp,sizeof(temp),L「%s \ t \ t \ t \ t%i \ t \ t%i \ n」,pList [ x] .name.c_str(),pList [x] .kills,pList [x] .deaths,wratio,pList [x] .suicides); 雖然這適用於很多名字,但是如果這個人的名字是由大寫字母組成的,即MEMEME,它將被間隔得太遠,而mememe會被正確地分隔。 – DirectXFag 2009-12-04 05:20:55

回答

0

嘿,對不起。修復。我需要根據單詞的像素長度來比較標籤,而不是有多少個字符。 GetTextExtent32W取得了訣竅。