2015-12-08 57 views
0

我使用自定義繪圖在WinForms應用程序中繪製字符串。經典Graphics.DrawString方法用於如下:Graphics.DrawString:統計在矩形中有效顯示的字符數

g.DrawString(text, font, brush, rect, stringFormat); 

輸出字符串text可以由矩形rect被剪切,我需要算上rect完全可見的字符數。如何使用.NET Framework內置工具來做到這一點?

請不要使用其他方法輸出文本。我需要爲GDI + Graphics.DrawString解決這個任務。


UPDATE:是的,當然,我可以在一個循環中,我總結從字符串的開頭每個字符的寬度用Graphics.MeasureString,但我需要在WinAPI的DrawText東西更高效像DT_MODIFYSTRING標誌功能。

此外,Graphics.MeasureString不能正確計算所需的寬度。富勒更多信息,請參閱這篇文章:

http://www.codeproject.com/Articles/2118/Bypass-Graphics-MeasureString-limitations

+0

您是否熟悉Graphics.MeasureString? https://msdn.microsoft.com/en-us/library/6xe5hazb(v=vs.110).aspx – Biscuits

+0

@Biscuits,你是否熟悉與Graphics.MeasureString相關的問題?例如,參見[this](http://www.codeproject.com/Articles/2118/Bypass-Graphics-MeasureString-limitations)。看來,我們需要使用[StringFormat.SetMeasurableCharacterRanges](https://msdn.microsoft.com/en-us/library/system.drawing.stringformat.setmeasurablecharacterranges(v = vs.110).aspx)進行更精確的計算。 – TecMan

回答

-1

你要通過字符必須循環,字符,通過串,測量每一個使用Graphics.MeasureString,直到它超越了矩形,然後通過一個後退字符。

如果它是一個多行文本框,它會變得更加複雜,因爲那樣你必須找出適當的單詞分隔符。如果你打破了整個單詞,你可能會退出多個角色。

+4

你可以做到這一點。或者使用具有* charactersFitted *參數的MeasureString重載,這很容易。沒有提及文本框順便說一句,它不使用DrawString。 –

+0

那麼確定,如果你想這樣做的簡單方法...(我沒有意識到超載,謝謝!) –

+0

這是不高效的。我已更新我的問題,請閱讀UPDATE部分。 – TecMan