Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы применить специальное форматирование к тексту, инициализируйте объект stringFormat и передайте адрес этого объекта в метод DrawString класса Graphics.
Чтобы нарисовать форматированный текст в прямоугольнике, необходимы объекты Graphics, FontFamily, Font, RectF, StringFormatи Brush.
Выравнивание текста
В следующем примере текст рисуется в прямоугольнике. Каждая строка текста выровнена по центру (по горизонтали), и весь блок текста выравнен по центру (по вертикали) в прямоугольнике.
WCHAR string[] =
L"Use StringFormat and RectF objects to center text in a rectangle.";
FontFamily fontFamily(L"Arial");
Font font(&fontFamily, 12, FontStyleBold, UnitPoint);
RectF rectF(30.0f, 10.0f, 120.0f, 140.0f);
StringFormat stringFormat;
SolidBrush solidBrush(Color(255, 0, 0, 255));
// Center-justify each line of text.
stringFormat.SetAlignment(StringAlignmentCenter);
// Center the block of text (top to bottom) in the rectangle.
stringFormat.SetLineAlignment(StringAlignmentCenter);
graphics.DrawString(string, -1, &font, rectF, &stringFormat, &solidBrush);
Pen pen(Color(255, 0, 0, 0));
graphics.DrawRectangle(&pen, rectF);
На следующем рисунке показан прямоугольник и центрированные тексты.
Предыдущий код вызывает два метода объекта StringFormat: StringFormat::SetAlignment и StringFormat::SetLineAlignment. Вызов StringFormat::SetAlignment указывает, что каждая строка текста находится в прямоугольнике, заданном третьим аргументом, переданным методу DrawString. Вызов StringFormat::SetLineAlignment указывает, что блок текста находится в центре (сверху вниз) в прямоугольнике.
Значение StringAlignmentCenter является элементом перечисления StringAlignment, объявленного в Gdiplusenums.h.
Настройка стоп-вкладок
Вы можете задать остановки табуляции текста, вызвав метод StringFormat::SetTabStops объекта StringFormat, а затем передав адрес этого объекта StringFormat методу DrawString класса Graphics.
В следующем примере вкладка останавливается на 150, 250 и 350. Затем в коде отображается упорядоченный по вкладкам список имен и результаты тестов.
WCHAR string[150] =
L"Name\tTest 1\tTest 2\tTest 3\n";
StringCchCatW(string, 150, L"Joe\t95\t88\t91\n");
StringCchCatW(string, 150, L"Mary\t98\t84\t90\n");
StringCchCatW(string, 150, L"Sam\t42\t76\t98\n");
StringCchCatW(string, 150, L"Jane\t65\t73\t92\n");
FontFamily fontFamily(L"Courier New");
Font font(&fontFamily, 12, FontStyleRegular, UnitPoint);
RectF rectF(10.0f, 10.0f, 450.0f, 100.0f);
StringFormat stringFormat;
SolidBrush solidBrush(Color(255, 0, 0, 255));
REAL tabs[] = {150.0f, 100.0f, 100.0f};
stringFormat.SetTabStops(0.0f, 3, tabs);
graphics.DrawString(string, -1, &font, rectF, &stringFormat, &solidBrush);
Pen pen(Color(255, 0, 0, 0));
graphics.DrawRectangle(&pen, rectF);
На следующем рисунке показан текст с вкладками.
Предыдущий код передает три аргумента методу StringFormat::SetTabStops. Третий аргумент — адрес массива, содержащего смещения вкладок. Второй аргумент указывает, что в этом массиве есть три смещения. Первый аргумент, переданный в StringFormat::SetTabStops, имеет значение 0, что указывает, что первое смещение в массиве измеряется от позиции 0, левого края ограничивающего прямоугольника.
Рисование вертикального текста
Можно использовать объект StringFormat, чтобы указать, что текст рисуется по вертикали, а не по горизонтали.
Следующий пример передает значение StringFormatFlagsDirectionVertical методу StringFormat::SetFormatFlags объекта StringFormat. Адрес этого объекта StringFormat передается методу DrawString классаграфики. Значение StringFormatFlagsDirectionVertical является элементом перечисления StringFormatFlags, объявленного в Gdiplusenums.h.
WCHAR string[] = L"Vertical text";
FontFamily fontFamily(L"Lucida Console");
Font font(&fontFamily, 14, FontStyleRegular, UnitPoint);
PointF pointF(40.0f, 10.0f);
StringFormat stringFormat;
SolidBrush solidBrush(Color(255, 0, 0, 255));
stringFormat.SetFormatFlags(StringFormatFlagsDirectionVertical);
graphics.DrawString(string, -1, &font, pointF, &stringFormat, &solidBrush);
На следующем рисунке показан вертикальный текст.