2010-06-10 4 views
1

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

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

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

Приложение выглядит хорошо работает на моей коробке Win7.

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

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

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

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

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

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

Благодаря

S

ответ

2

Это, вероятно, проблема масштабирования, машина 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.

+0

Ну, это интересный момент. Элементы управления, которые затронуты, не имеют того же размера шрифта, что и форма. Шрифт больше. В качестве эксперимента я просто попробовал изменить шрифт по умолчанию для формы большего размера .. все это стало больше (yuck), но текст кнопки/метки не был отрублен на XP. Попробуйте свое предложение сейчас .. – HotOil

+0

В окне разработки ручное масштабирование формы с помощью вашего кода создает расширенную форму с побочным эффектом. Элементы управления с отрубленным текстом находятся в панели на форме. После масштабирования формы панель не появляется. Не уверен, где она находится, нужно отлаживать это дальше. Помимо этого. AutoScaleMode установлен в «Шрифт» в форме. Я изменил его на «DPI», и теперь он выглядит хорошо на коробках XP. Это хорошая новость .. но я не уверен, что это окончательное решение? Что делать, если в каком-то другом окне есть проблема с размером системного шрифта? Кажется, что нет единого размера для всех? – HotOil

+1

Ну, нет, масштабирование - это несовершенное искусство. Вот почему есть значения * two * для AutoScaleMode. это не должно меняться, изменение DPI также должно изменить базовый размер шрифта. За исключением ящиков, которые вы используете. Вздох. Давайте все купим мониторы 600 DPI. –

Смежные вопросы