Зачем нужен UseCompatibleTextRendering здесь? - PullRequest
1 голос
/ 10 июня 2010

Я думаю, что мне не хватает чего-то фундаментального.Пожалуйста, скажите мне, что это, если можете.

Я разработал небольшое приложение C ++ WinForms, используя VS2008.Так что он построен с использованием .NET 3.5 SP1.Мой ящик для разработки - Win7, если это имеет значение.

Значение по умолчанию свойства UseCompatibleTextRendering в элементах управления WinForms в этой версии VStudio равно false.И это не должно иметь значения для меня, я не думаю.У меня нет какого-либо пользовательского текста или элементов управления.

Приложение хорошо работает на моем компьютере с Win7.

Если я упакую его (перетаскивая .NET 3.5) и установлю егона одном из наших рабочих столов WinXP кнопки и метки выглядят не очень хорошо;текст отрублен в них.

Если установить для UseCompatibleTextRendering значение true, а затем запустить его на полях XP, текст поместится в кнопки и метки.

Мой вопрос: почему?В результате установки .Net 3.5 на окнах XP, поэтому приложение должно быть в состоянии найти и использовать правильную версию WinForms, верно?

Я должен заметить, что прежде чем я положу свое приложение + .NET 3.5 на эти коробки, у них вообще нет .NET.Они не получают автоматические обновления Microsoft;наш айтишник выпускает патчи и обновления.

[Подобные вещи случались и раньше с приложениями, которые я создаю ... они отлично смотрятся / работают на машинах Engineering, потому что мы поддерживаем их, и у них в основном есть самые современные вещи.Когда они запускаются на корпоративных блоках, они обычно не запускаются и им нужен установленный VCredist.]

Возвращаясь к рассматриваемому вопросу: текст выглядит лучше, если для UseCompatibleTextRendering установлено значение false, поэтому я бы предпочел оставить его таким, если смогу.Я хотел бы понять, что может отсутствовать в тех окнах XP, из-за которых текст не помещается.

Спасибо

S

1 Ответ

2 голосов
/ 11 июня 2010

Вероятно, это проблема масштабирования, на компьютере с XP может быть другой параметр DPI видеоадаптера или другой размер системного шрифта. Масштабирование зависит от формы AutoScaleMode и от того, наследуют ли они свойство Font элемента управления контейнера. Что и происходит, если свойство Font не выделено жирным шрифтом в окне «Свойства».

Один быстрый способ проверить, работает ли свойство масштабирования в вашей форме:

protected:
    virtual void OnLoad(EventArgs^ e) override {
        this->Font = gcnew System::Drawing::Font(this->Font->FontFamily, 
            this->Font->SizeInPoints * 125 / 96);
    }

Это увеличивает масштаб. Вероятно, его уменьшают на компьютере с XP, используйте 96/125.

...