Я программировать оконные приложения Windows (используя Windows API, а не какие-нибудь фреймворки типа MFC) учился в начале 2000-х и с тех пор не занимался этим) И вот у меня тут вопрос возник — ничего в принципах работы графической системы Windows с тех пор принципиально не поменялось случаем? Ну может там все переходит на .NET и CLR, к примеру, или еще чего? Может быть в связи с унификацией десктопных и мобильных платформ какие-то принципиальные изменения в графическую систему вносятся/будут внесены? Или принципы графической системы Windows (message loop, оконная процедура, GetMessage(), DispatchMessage() и т.д.) остались незыблемы?
Еще раз четко сформулирую вопросы:
1) Изменились ли принципы работы графической системы в современных версиях Windows по сравнению с Windows 98, Windows XP?
2) Если не изменились, то в обозримом будущем какие-то изменения предвидятся?
Здравствуйте, Максим Рогожин, Вы писали:
МР>Еще раз четко сформулирую вопросы: МР>1) Изменились ли принципы работы графической системы в современных версиях Windows по сравнению с Windows 98, Windows XP? МР>2) Если не изменились, то в обозримом будущем какие-то изменения предвидятся?
Нет, не особо изменилось. Говорят, что-то новое появилось в UWP. Но, что там конкретно появилось и кто этим пользуется —
Re: Принципы работы графической системы Windows остаются?
Здравствуйте, Максим Рогожин, Вы писали:
МР>Привет всем!
МР>Или принципы графической системы Windows (message loop, оконная процедура, GetMessage(), DispatchMessage() и т.д.) остались незыблемы?
Да, те же.
МР>Еще раз четко сформулирую вопросы: МР>1) Изменились ли принципы работы графической системы в современных версиях Windows по сравнению с Windows 98, Windows XP? МР>2) Если не изменились, то в обозримом будущем какие-то изменения предвидятся?
Да изменились. GDI умирает.
Появились high-DPI мониторы. 200-300dpi против бывших 100dpi что означает увеличение кол-ва пикселей в 4-9 раз.
CPU (а GDI это CPU rasterization) уже не справляется. Поэтому графика переползает на GPU. Новые слова: Direct2D, DirectComposition, DirectWrite — это все про hardware acceleration.
Начиная с Windows 8.1 поддерживается не только multi-monitor но и multi-dpi-monitors.
Пиксели, и UI прибитый гвоздями к пиксельным сеткам — умирает. dip это наше всё нынче.
В качестве примера:
Вот Evernote с GDI UI и то же в Sciter (использует Direct2D) на high-dpi мониторе:
Видно Windows рисует каждый GDI пиксел как 4 физических пиксела — неряшливо.
Здравствуйте, c-smile, Вы писали:
CS>Видно Windows рисует каждый GDI пиксел как 4 физических пиксела — неряшливо.
А что с этим теперь делать будут?
Ну то есть обычный виндовый проводник тоже ж на Windows GDI, и всякие панели управления, стандартные диалоги, вот это вот всё, что на обычных WinAPI Common Controls...
Максим Рогожин:
МР>Я программировать оконные приложения Windows (используя Windows API, а не какие-нибудь фреймворки типа MFC) учился в начале 2000-х и с тех пор не занимался этим) И вот у меня тут вопрос возник — ничего в принципах работы графической системы Windows с тех пор принципиально не поменялось случаем? Ну может там все переходит на .NET и CLR, к примеру, или еще чего? Может быть в связи с унификацией десктопных и мобильных платформ какие-то принципиальные изменения в графическую систему вносятся/будут внесены? Или принципы графической системы Windows (message loop, оконная процедура, GetMessage(), DispatchMessage() и т.д.) остались незыблемы?
Если хочешь, чтобы приложение работало на всех разновидностях винды, и могло распространяться через их магазин (как он там называется?), тогда только UWP.
Там что-то навроде html, а обработчики событий на скриптах или на дотнете (если соврал, знатоки поправят).
Re[3]: Принципы работы графической системы Windows остаются?
Здравствуйте, Alexander G, Вы писали:
AG>А что с этим теперь делать будут? AG>Ну то есть обычный виндовый проводник тоже ж на Windows GDI, и всякие панели управления, стандартные диалоги, вот это вот всё, что на обычных WinAPI Common Controls...
Нормально всё там с GDI. Старые приложения автоматические масштабируются и получается гадость навроде той, что показал c-smile. Новые dpi aware приложения рисуются пиксел в пиксел.
PS: Виртуальные пикселы и неконтроллируемый субпиксельный рендеринг — вот где зло!
Re[3]: Принципы работы графической системы Windows остаются?
Здравствуйте, Максим Рогожин, Вы писали:
МР>Я программировать оконные приложения Windows (используя Windows API, а не какие-нибудь фреймворки типа MFC) учился в начале 2000-х и с тех пор не занимался этим) И вот у меня тут вопрос возник — ничего в принципах работы графической системы Windows с тех пор принципиально не поменялось случаем? Ну может там все переходит на .NET и CLR, к примеру, или еще чего? Может быть в связи с унификацией десктопных и мобильных платформ какие-то принципиальные изменения в графическую систему вносятся/будут внесены? Или принципы графической системы Windows (message loop, оконная процедура, GetMessage(), DispatchMessage() и т.д.) остались незыблемы?
Принципы-то остались, а вот реализация поменялась. Тут уже многое сказали, я хочу лишь напомнить еще про WPF. Есть в этих приложениях message loop, оконная процедура, GetMessage(), DispatchMessage() и т.д., вот только окон нет. Вернее, есть одно окно, а все остальное нарисовано — windowsless controls. А отсюда всякое масштабирование, которое раньше в диалогах, например, было обычно не принято.
With best regards
Pavel Dvorkin
Re[2]: Принципы работы графической системы Windows остаются?
Здравствуйте, Дрободан Фрилич, Вы писали:
ДФ>Если хочешь, чтобы приложение работало на всех разновидностях винды, и могло распространяться через их магазин (как он там называется?), тогда только UWP. ДФ>Там что-то навроде html, а обработчики событий на скриптах или на дотнете (если соврал, знатоки поправят).
Гм... Начнём по порядку.
1) WPF — краеугольный камень современного Windows UI. Ну как современного — начиная с 2006 года, т.е. больше 10 лет. Идеологически WPF действительно напоминает HTML (стили как в CSS, гриды как основной элемент вёрстки и т.п.)
2) На основе WPF есть ряд Фреймворков, которые позволяют делать UI для десктопа, для телефона, а также universal apps (одновременно для десктопа, телефона и что там ещё).
3) События и их обработчики там есть, конечно, но есть много иных приколюх (типа тех же behaviors, transitions и т.п.).
Re[4]: Принципы работы графической системы Windows остаются?
Здравствуйте, Mr.Delphist, Вы писали:
MD>Здравствуйте, Дрободан Фрилич, Вы писали:
ДФ>>Если хочешь, чтобы приложение работало на всех разновидностях винды, и могло распространяться через их магазин (как он там называется?), тогда только UWP. ДФ>>Там что-то навроде html, а обработчики событий на скриптах или на дотнете (если соврал, знатоки поправят).
MD>Гм... Начнём по порядку. MD>1) WPF — краеугольный камень современного Windows UI. Ну как современного — начиная с 2006 года, т.е. больше 10 лет. Идеологически WPF действительно напоминает HTML (стили как в CSS, гриды как основной элемент вёрстки и т.п.)
А ты правильно перевел "краеугольный" по отношению к WPF? Может там было всё же "надгробный"?
Что конкретно написано в современном Windows на WPF?
Из того что знаю достоверно про WPF: из всех антивирусов только Kaspersky использует WPF для UI. Остальные известно что.
Была попытка сделать Evernote UI на WPF (версия 3.5 емнип). disaster получился, срочно переписали на C++ и plain windows API.
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, c-smile, Вы писали:
CS>>Из того что более менее работает на WPF это GitHub Desktop application
AG>Visual Studio 2015 вроде на WPF, не?
А фиг его знает, там какие-то child окна с WinForms есть но это конечно ни о чем не говорит.
Но судя по тому что на Microsoft Visual Code (что ни разу не WPF) они столько людей отрядили то Visual Studio 2020 будет не WPF точно.
Что-то мне говорит что MS трудится над Electron с Edge engine внутри.
Re[4]: Принципы работы графической системы Windows остаются?
Здравствуйте, c-smile, Вы писали:
CS>А ты правильно перевел "краеугольный" по отношению к WPF? Может там было всё же "надгробный"?
Ну, каждый может сам выбрать эпитеты, но феншуйный способ рисовать UI для десктопных/мобильных приложений — именно WPF. Просто хардкорному Win32-разработчику тяжко менять парадигму, переходя на windowless controls, поэтому многие шарашат как привыкли (QT, Электрон, MFC, WTL).
CS>Что конкретно написано в современном Windows на WPF?
Тайловый метро-десктоп восьмёрки, меню "Пуск" десятки — выглядят именно как типовой WPF (даже если не являются им технологически).
CS>Была попытка сделать Evernote UI на WPF (версия 3.5 емнип). disaster получился, срочно переписали на C++ и plain windows API.
Не осилили WPF? Хм, могли ж и на WinForms запилить, хотя после появления WPF он считается legacy.
Не осилили .NET в целом? Хм, скорее, сработали какие-то внутренние стратегические цели, поэтому и перешли C++. В общем, дело ясное, что дело тёмное, и WPF тут просто один из предметов декораций.
CS>Из того что более менее работает на WPF это GitHub Desktop application CS>Но и то, для того чтобы нарисовать timeline они туда воткнули Chrome: https://githubengineering.com/cross-platform-ui-in-github-desktop/ CS>Архитектура сего приложения вообще вызывает какое-то странное ощущение ... CS>Написали бы уже его на Electron всё ...
Опен-сорс во всей красе — я тебя слепила из того что было. В общем, опять WPF виноват
Re[5]: Принципы работы графической системы Windows остаются?
Здравствуйте, Mr.Delphist, Вы писали:
CS>>Что конкретно написано в современном Windows на WPF?
MD>Тайловый метро-десктоп восьмёрки, меню "Пуск" десятки — выглядят именно как типовой WPF (даже если не являются им технологически).
Так "выглядит" или таки "WPF"?
CS>>Была попытка сделать Evernote UI на WPF (версия 3.5 емнип). disaster получился, срочно переписали на C++ и plain windows API.
MD>Не осилили WPF? Хм, могли ж и на WinForms запилить, хотя после появления WPF он считается legacy. MD>Не осилили .NET в целом? Хм, скорее, сработали какие-то внутренние стратегические цели, поэтому и перешли C++. В общем, дело ясное, что дело тёмное, и WPF тут просто один из предметов декораций.
Причем здесь "не осилили"? Я же тебе говорю что 3.5 версия вышла и работала как-то.
А вот пользователи... те не смогли, да. Приложение утилитарное — должно стартовать в пределах 100ms, занимать мало памяти в background.
Природа таких приложений требует легковесности. Copy-paste note и дальше работаешь.
Re: Принципы работы графической системы Windows остаются?
Здравствуйте, Максим Рогожин, Вы писали:
МР>Еще раз четко сформулирую вопросы: МР>1) Изменились ли принципы работы графической системы в современных версиях Windows по сравнению с Windows 98, Windows XP?
нет
МР>2) Если не изменились, то в обозримом будущем какие-то изменения предвидятся?
нет, но всех могут принудительно загнать в свой магазин и чего нибудь навязать.
Re[2]: Принципы работы графической системы Windows остаются?
Здравствуйте, c-smile, Вы писали:
CS>В качестве примера: CS>Вот Evernote с GDI UI и то же в Sciter (использует Direct2D) на high-dpi мониторе: CS>Видно Windows рисует каждый GDI пиксел как 4 физических пиксела — неряшливо.
плохой пример, просто Evernote не DPI Aware и всё.
для обычного интерфейса просто добавляется манифест и всё становится как в Sciter с обычными виндовыми контролами, а при добавлении битмапов под разные dpi даже лучше.
Re[3]: Принципы работы графической системы Windows остаются?
Здравствуйте, uuuser, Вы писали:
U>Здравствуйте, c-smile, Вы писали:
CS>>В качестве примера: CS>>Вот Evernote с GDI UI и то же в Sciter (использует Direct2D) на high-dpi мониторе: CS>>Видно Windows рисует каждый GDI пиксел как 4 физических пиксела — неряшливо.
U>плохой пример, просто Evernote не DPI Aware и всё.
U>для обычного интерфейса просто добавляется манифест и всё становится как в Sciter с обычными виндовыми контролами, а при добавлении битмапов под разные dpi даже лучше.
Если бы все так просто было бы то никаких проблем бы не было ...
Запусти например Device Manager в Windows 10 на high-dpi monitor — увидишь ту же хрень. Уж в Редмонде могли бы manifest всем exe подсунуть — ан нет ...
Re[2]: Принципы работы графической системы Windows остаются?
Здравствуйте, uuuser, Вы писали:
U>Здравствуйте, Максим Рогожин, Вы писали:
МР>>Еще раз четко сформулирую вопросы: МР>>1) Изменились ли принципы работы графической системы в современных версиях Windows по сравнению с Windows 98, Windows XP?
U>нет
Ты про WM_DPICHANGED message случаем не забыл? А про OpenType шрифты? Чем ты их рендерить предлагаешь если "нет"?
А про то что GDI alpha канал как не знал ничего так и не знает? Как ты предлагаешь делать что либо близкое к start menu / action center?
Re[4]: Принципы работы графической системы Windows остаются?
Здравствуйте, c-smile, Вы писали:
CS>Если бы все так просто было бы то никаких проблем бы не было ...
их и нет
CS>Запусти например Device Manager в Windows 10 на high-dpi monitor — увидишь ту же хрень. Уж в Редмонде могли бы manifest всем exe подсунуть — ан нет ...
то, что мелкомягкие не могут допилить свою недоось и тянут две панели управления и в некоторых местах вообще иконки от винды 3.11(образно) это их проблемы
Вынь10 300%
дефолтный проект из студии на обычных виндовых контролах, только включил DPI Aware, ещё сунуть нормальную иконку и всё.