Гладкий текст на стекле - PullRequest
0 голосов
/ 06 мая 2010

Я видел много других образцов, которые рисуют гладкий текст на стекле. Но я не могу их использовать. Мне нужно, чтобы каждый ярлык, добавляемый во время выполнения, был гладким. Я не могу просто «нарисовать» текст на экране.

Возможно ли это вообще, и есть ли источники вокруг?

Спасибо

1 Ответ

0 голосов
/ 06 мая 2010

Продолжай в этой статье http://msdn.microsoft.com/en-us/magazine/cc163435.aspx#S6

Это немного длинно, но оно отвечает на многие ваши вопросы и больше касается стекла.

но соответствующая часть для вас напрямую

Одна особенность в том, что рендеринг элемента GDI в черном использует битовая комбинация 0x00000000-которая также бывает полностью прозрачным черный, если вы используете альфа канал. Это означает, что если вы рисуете с черной кистью или ручкой GDI вы получить прозрачный цвет, а не черный один. Самая большая проблема это представляет когда вы пытаетесь использовать по умолчанию цвет текста в элементе управления текстом этикетка, которая находится на стеклянной поверхности. Так как цвет текста по умолчанию обычно черный, DWM рассмотрит это чтобы быть прозрачным и текст будет написано в стекле неправильно. Пример можно увидеть в Рисунок 10. Первая строка написана с GDI + вторая текстовая метка управление с использованием цвета по умолчанию. Как вы можете видеть, это почти неразборчиво потому что это на самом деле неправильно визуализированный текст, который отображается как серый, не черный.

К счастью, есть несколько способов вокруг этой проблемы. Используя владелец-ничья Управление это одно. Рендеринг в растровое изображение у которого есть альфа-канал, другой. К счастью, самый простой способ получить текст на элементах управления, чтобы позволить .NET Framework 2.0 использует GDI + для вас. это это легко сделать, установив Использовать свойство CompatibleTextRendering для ваши элементы управления По умолчанию это свойство имеет значение false, чтобы элементы управления, написанные для предыдущих версий .NET Framework будет отображать так же. Но если вы установите значение true, ваш текст будет выглядеть правильно. Вы можете установить свойство глобально с Application.SetUseCompatibleTextRenderingDefault способ.

Он также предоставляет пример кода, который вы можете поместить в свой Main ()

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(true);
    Application.Run(new GlassForm());
}

Но я рекомендую прочесть статью, она многое прояснит с Aero / Glass

Ура, PhyX

...