2012-11-19 27 views
1

我正在寫一個WinForms用戶控件。我的計劃是允許調用者修改控件的字體,但強制字體始終是固定寬度的字體。在.NET中獲取TEXTMETRIC.tmAveCharWidth

我然後需要一個插入符的控制內水平定位。當我在C++中完成時,我使用了GetTextMetrics()TEXTMETRIC.tmAveCharWidth。但在本週末花了一大堆時間之後,我一直無法在C#/ WinForms中複製它。

我知道有聲明,所以我可以直接調用GetTextMetrics()的方式。但我希望.NET的方式來做到這一點。 (如果沒有,是否有人有正確的語法在.NET中聲明該API函數)

+0

http://www.pinvoke.net/default。 aspx/gdi32/gettextmetrics.html – stuartd

+0

謝謝。看起來像一個很好的資源。 –

回答

2

這個工作從Windows窗體:

TextMetrics metrics; 
var renderer = new VisualStyleRenderer(VisualStyleElement.Window.Dialog.Normal); 

using (var context = this.CreateGraphics() as IDeviceContext) 
{ 
    var metrics = renderer.GetTextMetrics(context); 
} 

var averageWidth = metrics.AverageCharWidth; 
+0

很酷。所以它直接支持。完全不熟悉'VisualStyleRenderer'。需要詳細閱讀。 –