여러 폰트를 사용중 같은 위치에 출력하고 싶을때 !!!

Game Programming/C++ 2011. 12. 9. 22:08

47.4 How can I draw a single line of text with different fonts using DrawString?

   

The key is that you have to calculate the ascent height of the font. The font ascent as reported by FontFamily.GetCellAscent is in what is called 'Design Units'. The Cell Spacing design unit value of fonts is proportional to the actual height of the font on the device. We use this relationship to calculate cell ascent in device units.

The rendering code has to just ensure that the x, y position passed to DrawString takes care of the ascent.

     private void HandlePaint(object sender, PaintEventArgs args) 
     { 
          // clear the background 
          Graphics g = args.Graphics; 
          g.Clear(Color.AliceBlue); 
           
          // create a pen 
          Pen pen = new Pen(Color.Red, 1f); 
           
          // the string to be drawn 
          string s = "Side by side"; 
           
          // the first font 
          Font f1 = new Font("Arial", 10f); 
          float strWidth1 = g.MeasureString(s, f1).Width; 
          float fontHeight1 = f1.GetHeight(g);      
          float fontAscentHeight1 = (fontHeight1/f1.FontFamily.GetLineSpacing(f1.Style))*f1.FontFamily.GetCellAscent(f1.Style); 
                
          // the second font 
          Font f2 = new Font("Times New Roman", 48); 
               float fontHeight2 = f2.GetHeight(g);      
               float fontAscentHeight2 = (fontHeight2/f2.FontFamily.GetLineSpacing(f2.Style))*f2.FontFamily.GetCellAscent(f2.Style); 

          // draw the base line      
          Point ptStart = new Point(0, this.ClientSize.Height/2); 
          Point ptEnd = new Point(this.ClientSize.Width, this.ClientSize.Height/2); 
          g.DrawLine(Pens.Black, ptStart, ptEnd); 
      
          // draw string with first font 
          g.DrawString(s, f1, Brushes.Red, new PointF(0, ptStart.Y - fontAscentHeight1)); 
          // draw string with second font 
          g.DrawString(s, f2, Brushes.Red, new PointF(strWidth1, ptStart.Y - fontAscentHeight2)); 
     }

참고 : http://msdn.microsoft.com/en-us/library/xwf9s90b.aspx
출처 : http://www.syncfusion.com/FAQ/windowsforms/faq_c39c.aspx 

설정

트랙백

댓글