Я пишу текстовое поле с нуля, чтобы оптимизировать его для подсветки синтаксиса. Тем не менее, мне нужно получить ширину символов в пикселях, а не мусор Graphics :: MeasureString дает мне. Я нашел много вещей в сети, в частности this , однако, похоже, что ничего из этого не работает или не учитывает вкладки. Мне нужен самый быстрый способ измерить точные размеры символа в пикселях и пространства табуляции. Я не могу понять это ...
Следует отметить, что я использую C ++, CLR / CLI и GDI +
Вот моя измерительная функция. В другой функции RectangleF, которую он возвращает, выводится на экран:
RectangleF TextEditor::MeasureStringWidth(String^ ch, Graphics^ g, int xDistance, int lineYval)
{
RectangleF measured;
Font^ currentFont = gcnew Font(m_font, (float)m_fontSize);
StringFormat^ stringFormat = gcnew StringFormat;
RectangleF layout = RectangleF(xDistance,lineYval,35,m_fontHeightPix);
array<CharacterRange>^ charRanges = {CharacterRange(0,1)};
array<Region^>^ strRegions;
stringFormat->FormatFlags = StringFormatFlags::DirectionVertical;
stringFormat->SetMeasurableCharacterRanges(charRanges);
strRegions = g->MeasureCharacterRanges(ch, currentFont, layout, stringFormat);
if(strRegions->Length >= 1)
measured = strRegions[0]->GetBounds(g);
else
measured = RectangleF(0,0,0,0);
return measured;
}
Я не совсем понимаю, что делает параметр MeasureCharacterRanges layoutRect. Я изменил код из примера Microsoft, чтобы работать только с одним символом или измерять его только.