2013-04-17 1 views
2

Когда в окне установлено значение «изменить размер текста до« 125% », мое приложение Win32 имеет увеличенный размер пользовательского интерфейса (но не его размер окна). Это приводит к отключению текстовых строк, а элементы пользовательского интерфейса исчезают с края window Я бы хотел, чтобы это не происходило, чтобы текст не масштабировался, и приложение отображается правильно. Поскольку время инвестиций для получения этого старого унаследованного приложения должным образом, DPI-осведомление слишком велико, и я просто хочу сделать приложение пригодным для использования, не позволяя Windows нарушать пользовательский интерфейс, изменяя размеры элементов пользовательского интерфейса.Как я могу предотвратить расширение элементов пользовательского интерфейса приложения Win32 при установке большого значения DPI?

Я попытался позвонить SetProcessDPIAware() во время запуска, а когда это не сработало, сообщив, что приложение является DPI Aware в его манифесте. , ни одна из этих мер не имеет никакого эффекта.

Кстати, здесь проявляется фрагмент, который я использую для определения осведомленности DPI:

<?xml version='1.0' encoding='utf-8' standalone='yes'?> 
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> 
    <asmv3:application 
      xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> 
    <asmv3:windowsSettings 
     xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
     <dpiAware>true</dpiAware> 
    </asmv3:windowsSettings> 
    </asmv3:application> 
</assembly> 
+0

«манифест» и «сборка» не звучат как стандартный C++. Вы используете C++/CLI или C#? Вы должны правильно задать свой вопрос. –

+0

@ArneMertz, к сожалению, Microsoft сделала манифесты, необходимые для регулярного C++. Например, это способ получить повышение UAC. –

+0

@ArneMertz Ассемблер сборки является стандартным Win32 и использовался с Windows XP, когда он разрешал тематику (между прочим), а затем Vista/7, где он указывал требуемые разрешения и высоту. – Deanna

ответ

0

Для масштабирования шрифта на 125%, осознанный настройка DPI не имеет значения. Что происходит, так это то, что текст будет на 25% больше, и теперь вам нужно увеличить свой пользовательский интерфейс, чтобы соответствовать. Обычно ваши диалоги должны быть на 25% больше для размещения большего текста. Мало того, что вам нужно масштабировать размеры, вам также необходимо масштабировать позиции. Это зависит от вас, чтобы закодировать все это. Или используйте инфраструктуру пользовательского интерфейса, которая сделает это за вас.

Для масштабирования шрифта, превышающего 125%, вступает в действие настройка DPI. Что произойдет, так это:

  1. Если ваше приложение не отмечено DPI, Windows будет масштабировать ваше приложение, используя изменение размера растрового изображения. Это приведет к пикселизации ваших визуальных элементов.
  2. Если ваше приложение отмечено знаком DPI, Windows сделает ваше приложение добросовестным. Опять же, бремя зависит от вас, чтобы масштабировать свой пользовательский интерфейс, чтобы соответствовать тексту.

У этого MSDN article есть все детали.

Обратно к вашему конкретному вопросу. Вы сказали:

Я хотел бы предотвратить это, чтобы текст не был увеличен, и приложение отображается правильно.

Другими словами, вы говорите, что хотите игнорировать настройку масштабирования шрифта пользователя и рендеринг на 100% DPI независимо от их пожеланий. Вы можете сделать это, уменьшив размер всего текста на 25%. Я действительно не рекомендую вам это делать.

+1

Не диалоги, как правило, в диалоговом окне, которые основаны на размере шрифта уже? –

+0

Хорошая точка @Mark - это должно идти в ответ, чтобы сделать ее более правильной. – mackenir

+0

@ Давид, я сделал редактирование - надеюсь, что все в порядке. – mackenir

0

Это только предупреждение о неправильном подозрении в MFC/Windows 7 по этой проблеме.

У меня была проблема, которая, похоже, была той же проблемой. Наше (более старое) приложение MFC при запуске в Windows 7 с его шрифтом, установленным на 125%, отображало диалоговые окна с неправильным размером. Элементы управления были масштабированы, но каждый диалог был примерно на 25% слишком мал.

Сначала я искал в диалоговом окне все, что могло бы установить его размер/положение. Затем я увидел, что многие люди в Интернете испытывают проблемы с размерами диалогов при перемещении приложений MFC в Windows 7, что ложно увеличило мои подозрения в MFC/Windows 7.

Наконец, я прочитал аналогичную дискуссию и нашел комментарий со стороны сопровождающего spy ++, что функция, в которой он сохраняет размер/положение при выходе, заставил окно изменить размер после изменения шрифта/DPI.Наше программное обеспечение делало то же самое, но код был в основном приложении, а не в диалогах.

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

  • Нет связанных вопросов^_^