Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Программирование графики > Разрешение окна в Win10 не соответствует действительности


Автор: simsergey 17.07.16, 07:14
Собственно код:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    void DX::DeviceResources::SetWindow(CoreWindow^ window)
    { // Вызывается всегда, когда создается или пересоздается основное окно
     
      DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView();
     
      m_logicalSize = Windows::Foundation::Size(window->Bounds.Width, window->Bounds.Height);
      m_dpi = currentDisplayInformation->LogicalDpi;
    }

Смотрю отладчиком, в окно передаются не настоящие значения, а метод Windows::Graphics::Display::DisplayInformation::GetForCurrentView() возвращает не настоящее значение DPI.

При системном масштабировании 100%:
DPI 79.6800003, m_logicalSize 1542.16870 x 877.108459
При системном масштабировании 125%:
DPI 68.1600037, m_logicalSize 1802.81689 x 1000.00000

Настоящие значения:
DPI 96.0, m_logicalSize 1280.0000 x 8000.00000

Как результат - размытая геометрия.

При работе приложения на Windows 8.1 программа получает настоящие значения, а при работе на Windows 10 такие значения.

Я что-то не правильно понимаю, или это баг в 10 ?

Автор: Pavia 17.07.16, 07:36
Цитата simsergey @
Я что-то не правильно понимаю, или это баг в 10 ?

Это баг Windows качует из версии в версию видимо для совместимости. Возможно для совместимости с принтерами.

Автор: simsergey 17.07.16, 07:48
В принципе, как пишется на msdn, DIPs пересчитываются в DPI.
Контексту D2D устанавливается настоящий DPI.
Я наблюдаю, как происходит масштабирование геометрии, буд-то ее перевели в растр, уменьшили на разницу разрешений DIPs и DPI, а потом растянули назад...
Или наоборот, нарисовали геометрию на рельном DPI, потом засунули в окно, растянули, и сузили окно по реальным размерам.:scratch:

Автор: simsergey 07.09.16, 13:51
И так, действительно, данная проблема была замечена и другими разработчиками.

Обновил студию на Win10, создал в ней:
1. универсальное приложение для Win8.1 с DirectX и XAML, доработали шаблон, теперь он пополнился обработчиком события CompositionScaleChanged event у компонента swapchainpanel.
2. универсальное приложение для Win10 с DirectX и XAML.

ОС Windowsm_dpi (8.1)CompositionScale (8.1)m_dpi (10)CompositionScale (10)
Приложение Win8.196.01.079.680.83
Приложение Win10--96.01.0

Получается действительно, система Windows 10 зачем-то скалит приложения Win8.1.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)