2011-03-20 241 views
0

我的程序通過計算文本的寬度和高度將文本字符串繪製成矩形,如果矩形太大則選擇較小的字體。但最初我只使用單行文本,現在我需要一些多行內容,我曾經使用GetTextExtentPoint32,但是如果字符串中有\ n,它似乎認爲這是一個正常字符。如何計算多字符串的字體寬度和高度?

DrawText與DT_CALCRECT只返回文本的高度...

有沒有一種簡單的方法來做到這一點?

+0

您不能永久縮小字體,否則將無法閱讀。所以最終你將不得不添加一個滾動條或一個More ...按鈕或其他方式來處理它。由於你必須這樣做,玩字體大小看起來像是高成本/低迴報的活動。當然,除非客戶要求這項要求,並且您按小時付款。 – 2011-03-20 19:21:33

+0

我在應用程序創建時加載了20個HFONT,最小的是5個高度,如果沒有字體適合矩形,那麼它將不會繪製任何東西:P和令人驚訝的性能非常好! – Kaije 2011-03-20 19:25:50

回答

1

文檔爲DrawText狀態,雖然它只返回的高度,它修改傳遞給它的矩形。你正在檢查矩形,還是隻返回值?這聽起來像你實際上想要傳遞一個寬度很大的矩形(即,你想允許的最大寬度),並且DrawText會根據需要減少。 (如果你在一個小寬度通過,將展開它只夠滿足最大的字。)

MSDN

如果存在多行文字,DrawText的使用矩形的寬指出,通過lpRect參數並擴展矩形的底部以限定最後一行文本。如果最大的單詞比矩形寬,則寬度將展開。
1

你應該這樣做大致是這樣的(僞代碼):

size text_dim(0,0); 
foreach(line in text.split("\n")) 
{ 
    size line_dim = GetTextExtentPoint32(line.start,line.length); 
    text_dim.y += line_dim.y; 
    text_dim.x = max(text_dim.x,line_dim.x); 
} 
return text_dim;