netlib.narod.ru< Назад | Оглавление | Далее >

Начертания шрифта

В пространстве имен System.Drawing определены два важных класса для работы со шрифтами:

Начнем с класса Font. Есть три категории конструкторов Font, основанные на:

Простейший конструктор Font создает новый шрифт на базе существующего. Новый шрифт отличается лишь начертанием:


Конструкторы Font (выборочно)



Font(Font font, FontStyle fs)


FontStyle — это перечисление, состоящее из серии однобитных флагов:


Перечисление FontStyle



Член Значение

Regular 0
Bold 1
Italic 2
Underline 4
Strikeout 8


Предположим, что font — это существующий шрифт, например, полученный из свойства Font формы:

  Font font = Font;

Вы можете создать его курсивное начертание, скажем, fontItalic, инструкцией:

  Font fontItalic = new Font(font, FontStyle.Italic);

Вы можете использовать несколько членов перечисления с оператором поразрядного ИЛИ языка С#:

  Font fontBoldStrikeout = new Font(font, FontStyle.Bold | FontStyle.Strikeout);

Вот программа, которая использует свойство Font формы и создает полужирное и курсивное начертания для вывода на экран обычного текста, полужирного и выделенного курсивом.

BoldAndItalic.cs

  //-------------------------------------------
  // BoldAndItalic (C) 2001 by Charles Petzold
  //-------------------------------------------
  using System;
  using System.Drawing;
  using System.Windows.Forms;

  class BoldAndItalic: PrintableForm
  {
      public new static void Main()
      {
          Application.Run(new BoldAndItalic());
      }
      public BoldAndItalic()
      {
          Text = "Bold and Italic Text";
      }
      protected override void DoPage(Graphics grfx, Color clr, int cx, int cy)
      {
          const string str1        = "This is some ";
          const string str2        = "bold";
          const string str3        = " text and this is some ";
          const string str4        = "italic";
          const string str5        = " text.";
          Brush        brush       = new SolidBrush(clr);
          Font         fontRegular = Font;
          Font         fontBold    = new Font(fontRegular, FontStyle.Bold);
          Font         fontItalic  = new Font(fontRegular, FontStyle.Italic);
          float        x           = 0;
          float        y           = 0;

          grfx.DrawString(str1, fontRegular, brush, x, y);
          x += grfx.MeasureString(str1, fontRegular).Width;

          grfx.DrawString(str2, fontBold, brush, x, y);
          x += grfx.MeasureString(str2, fontBold).Width;

          grfx.DrawString(str3, fontRegular, brush, x, y);
          x += grfx.MeasureString(str3, fontRegular).Width;

          grfx.DrawString(str4, fontItalic, brush, x, y);
          x += grfx.MeasureString(str4, fontItalic).Width;

          grfx.DrawString(str5, fontRegular, brush, x, y);
      }
  }

Так как один из аргументов DrawString — Font, а шрифты определены только как нормальный, полужирный, курсивный и курсивный полужирный, требуется несколько вызовов DrawString, чтобы вывести на экран текст, сочетающий разные начертания. Программа использует MeasureString для того, чтобы определить размеры каждого фрагмента текста и расположить текст горизонтально:


Рис. 9.1.

Если приглядеться, можно заметить увеличенные пробелы между отдельными фрагментами текста на экране. Я покажу, как этого избежать, когда дойдем до детального описания класса StringFormat.

И еще одно предостережение, которое мы обсудим позднее: конструктор Font может не работать, если гарнитура, к которой принадлежит шрифт, не поддерживает требуемое начертание. Он сгенерирует исключение, которое правильно написанная программа должна обработать. Этой проблемы нет в программе BoldAndItalic, потому что в ней используется шрифт формы по умолчанию, а он имеет все виды начертаний. Однако BoldAndItalic не будет работать с любой произвольной гарнитурой.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz