Можно ли установить TextRenderingHint для использования в целом приложении? - PullRequest
3 голосов
/ 10 февраля 2010

Я хочу использовать сглаженные шрифты в приложении C #. Я прочитал здесь , как это можно сделать с событием Paint каждой формы:

public class SmoothingFonts : System.Windows.Forms.Form
{
    ...

    private void InitializeComponent()
    {
        ...

        this.Paint += this.SmoothingFonts_Paint;
    }

    private void SmoothingFonts_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        Font TextFont = new Font("Verdana", 25, FontStyle.Italic);
        e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
        e.Graphics.DrawString("Sample Text", TextFont, Brushes.Black, 20, 150);
    }
}

Это может стать громоздким, потому что мы уже сделали много форм. Также в каждой форме мы используем несколько типов форм. Может ли настройка для TextRenderingHint быть установлена ​​глобально?


РЕДАКТИРОВАТЬ 1

Приведенный пример, хотя он и устарел, как правильно указано nobugz , помог мне понять, что лучшим TextRenderingHint для использования в этой системе является AntiAliasGridFit. Аппаратная платформа закрыта, поэтому я могу заверить, что лучшая конфигурация для этой системы будет наилучшей для всех систем, где будет развернуто приложение.

Можно ли установить настройку по умолчанию для TextRenderingHint в любом месте? Я запускаю приложение в образе Windows Embedded Standard (ранее Windows XP Embedded).


РЕДАКТИРОВАТЬ 2

Я обнаружил, что в системе XP вы можете установить тип TextRenderingHint, используемый по умолчанию в реестре. Это не по методу приложения, а по методу пользователя. Ключи реестра:

HKCU\Control Panel\Desktop\FontSmoothing      {2 for activating font smoothing}
HKCU\Control Panel\Desktop\FontSmoothingType  {1 for Antialiasing, 2 for ClearType}

Спасибо за поддержку!

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

Статья, на которую вы ссылаетесь, может быть как неактуальной, так и устаревшей. ClearTypeGridFit уже является режимом рисования сглаживания по умолчанию на компьютерах, на которых включен ClearType. И вы должны использовать класс TextRenderer для рендеринга текста, Graphics.DrawString () имеет проблемы.

Вы можете перепроверить, что вы получаете сглаживание ClearType, используя утилиту ZoomIt SysInternals. При увеличении вы сможете увидеть красноватые и голубоватые полосы вдоль контура шрифта.

0 голосов
/ 10 февраля 2010

Вы можете использовать рендеринг текста GDI, используя TextRenderer , если не печатаете его позже. В остальном просто правый аналогичный класс с методом DrawText с параметром take Graphics в качестве значения подсказки при каждом вызове метода

.
  TextRenderer.DrawText(    e.Graphics,
                            "Text",
                            font,
                            textRect,
                            ForeColor,
                            BackColor
                            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...