Трудно преобразовать c
в управляемый код. Вы должны использовать код .Net напрямую, если он доступен.
Для MeasureString
см ссылку Graphics.MeasureString Method
Пример:
using System.Diagnostics;
...
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
Font font = new Font("Arial", 16);
SizeF sz = g.MeasureString("Text...", font);
Rectangle rc = new Rectangle(0,0, (int)sz.Width, (int)sz.Height);
Debug.WriteLine(rc.Width.ToString());
Debug.WriteLine(rc.Height.ToString());
//change top/left origin of rectangle
rc.X = 10;
rc.Y = 20;
}
Вам просто нужно ширину и высоту текста. Вы можете изменить левый/верхний угол rectangle.
Кстати, метод C дает прямоугольник с верхними/влево координат в нуле, так что это та же информация, как Size
Редактировать
Это будет соответствовать текст с слово- флаг разрыва в прямоугольник, ширина которого равна 100. Высота прямоугольника неизвестна. TextRenderer.MeasureText
расскажет нам о высоте прямоугольника. Верхний/левый угол можно изменить, выравнивание можно изменить.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Font font = new Font("Arial", 10);
string text = "I'm trying to draw a box around a label which has been aligned.";
Size layout = new Size(100, 0);
Size sz = TextRenderer.MeasureText(e.Graphics, text, font, layout,
TextFormatFlags.WordBreak);
Rectangle rc = new Rectangle(new Point(0,0), sz);
e.Graphics.DrawRectangle(Pens.Black, rc);
TextRenderer.DrawText(e.Graphics, text, font, rc,
SystemColors.ControlText, SystemColors.Control, TextFormatFlags.WordBreak);
}
Я только что нашел https://msdn.microsoft.com/en-us/library/windows/desktop/ms535831(v=vs.85).aspx, но я не могу понять, как использовать его в C# – fbstj
У вас размер строки. Точно, где вы его положили, это зависит от вас. –
Я знаю, но учитывая, что функции берут точку для рисования на, а затем параметры относительно того, где выровнять ее с этой точкой, как я могу найти, где положить размер, связанный с точкой? – fbstj