Hola jose,
yo estoy haciendo algo perecido, bueno diria que el problema que tengo
es el mismo que el tuyo. y lo sulucione de esta manera.
lo que quieria pintar con GDI es un texto con formato(en mi caso utilizo
RTF), lo que hago es interpretar la cadena y clasificar las palabras
(cadena, color, tamaņo, tipo de letra)
y lo coloco en un arreglo de palabras.
luego recorro el areglo y utilzo un drawString para pintarlo, ahora
hasta ahi parace todo bien, que supongo que tu pensaste algo parecido,
el problema es que cada tipo de letra tiene diferentes tamaņos y para
eso utilce algunas funciones del fontFamily para calcular el heigh de
cada letra y pintarlas a todas en una misma linea.
en fin..
aca te mando un extracto de la parte del pintado, ojala te sirva( en
este codigo no guardo el tipo itailc, bold underline, recien lo estoy
haciendo, solo uso regular ).
for (int j = 0; j < m_Texts.Count; j++)
{
Font font = new Font(m_Texts[j].FontName,
m_Texts[j].Size, FontStyle.Regular, GraphicsUnit.Point);
SizeF size = g.MeasureString(m_Texts[j].Text, font);
float baseLineOffset = (font.Size /
(float)font.FontFamily.GetEmHeight(font.Style)) *
(float)font.FontFamily.GetCellAscent(font.Style);
float baseLineOffsetInPixels = (g.DpiY / 72.0f) *
baseLineOffset;
point.Y = PosY + (heightMax -
baseLineOffsetInPixels);
SolidBrush brush = new SolidBrush(
m_Texts[j].Color);
g.DrawString(m_Texts[j].Text, font, brush, point.X,
point.Y);
point.X += size.Width;
}
la variable heightMax es el maximo heigh de toda las palabras.
cualquier cosa, derepente nos podemos ayudar con nuestros proyectos.
ya que por lo que lei, estamos haciendo cosas muy parecidas.
*** Sent via Developersdex
http://www.developersdex.com ***