2012-11-19 24 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'。需要详细阅读。 –