Comments 43
Может ещё DOS бэкенд (скажем, поверх VBE) добавить? В SDL была такая активность, но похоже всё закончилось.
Ох, ньюби от программирования всё ещё думает что С++ равно легаси... Вероятно это выпускник Яндекс.практикума - у них так и написано:
https://education.yandex.ru/journal/legacy-kod-chto-eto-i-pochemy-s-nim-klassno-rabotat
Что такое легаси-код
Самое общее определение легаси — это код, который используется кем-то помимо его автора. Другие определения:
код, написанный на старой версии языка или с использованием устаревшего фреймворка;
По вашим меркам все актуальные операционные системы это легаси? Ведь они написаны на С/++ и ассемблере. Такая что-ли логика? Ну вы хотя бы ознакомьтесь с терминами
Это игра слов. Не нужно так серьезно относиться.
Термин Легаси переводится как наследие. И использую я его именно в этом контексте. Поддерживая в том числе и старые ОС, типа windows 3.1 и windows 95. Этим и обусловлен замысел статей, gdi это Легаси api.
Тогда не "пишем легаси", а "пишем нечто, поддерживающее легаси"?
gdi это Легаси api.
Вот кстати совсем отстал от жизни - обычные виндовые контролы теперь уже поверх DirectX работают?
Сама Microsoft уходит от "обычных виндовых контролов". Их уже нет в меню Пуск, в новой панели управления, таскбаре и области нотификаций. Всё переводится на WPF. Поэтому GDI (точнее, USER32)-контролы можно считать Legacy.
То есть для простеньких программ в стиле утилит от sysinternals, для которых может хватить стандартных нативных контролов совсем без (или с минимумом) ручной отрисовки, предлагается под капотом использовать .Net и соответственно жрать процессор/память?
Вы стандартый Task Manager видели в Widnows 11? Он полностью переписан на WPF и у меня жрёт 80 мегабайт. Если уж MS к важной критичной утилите так относится (которая нужна, чтобы экстренно снять зависшее приложение, в условиях вероятной нехватки памяти), что говорить о других утилитах.
Вы меня навели на мысль, сравнить task manager на разных ос, от windows 2000 по windows 11. Интересно сравнить, затраты цпу, ОЗУ, количество вызовов функции вообще.
Если уж MS к важной критичной утилите так относится
То не стоит повторять их глупости. Надеюсь, для нормальных программистов GDI и контролы оставили, по крайней мере раньше к обратной совместимости относились серьёзно.
Ещё об отношении MS к legacy - именно их офис полностью игнорит настройки цвета для неактивного тайтлбара, при переключении окон ничего не меняется. Хром хотя бы оттенок меняет, и только Command Prompt и Emacs (из того, что использую постоянно) берут цвет неактивного тайтлбара из системных настроек.
Я не смог найти в новой панели управления в Win10/Win11 настройки цвета отдельных компонент (цвет окна, заголовка, скролл-бара и т.д.), какие были c Windows 95. Только некая абстрактная схема - Light/Dark и некий Accent Color, который неизвестно где используется. Так что, кастомизируемый цвет неактивного заголовка - это тоже Legacy.
P.S. больше всего в новом UI бесят неотключаемые скругления на окнах, из-за чего получаются неаккуратные скриншоты отдельных окон - либо обрезается рамка, либо в скрин попадают пиксели от соседних окон.
У меня на десятке активный - синий, неактивный - серый, и помнится пару лет назад я это явно выставлял без редактирования реестра; сейчас тоже не могу найти. Но вообще в ситуации, когда на экране несколько однотипных окон, никак не выделять активное - это странно. Ладно хоть с консолью работает.
Смысл не в использовании GDI, а в обеспечении совместимости с GDI в том числе под единым API. Использовать его напрямую без абстрагирования в 2025, смысла нет.
Если программа чисто виндовая (типа того же Process Explorer), зачем лишние абстракции?
Process Explorer и не использует GDI напрямую. Он не отрисовывает контролы через GetDC/FillRect/DrawText, как это делает автор в статье.
Под GDI подразумевалось GDI+стандартные чекбоксы, листбоксы и прочее с использованием через обычные Cшные вызовы Win32. Хотя графики загрузки CPU, потребления памяти и т.п. возможно и на простых графических примитивах.
Контролы Win32 сильно устарели, хотя бы потому что не поддерживают "эластичный" интерфейс - чтобы контролы растягивались вместе с резайзом окна. Можно, конечно, всё подпирать костылями, но лучше взять (легковесную) обёртку-абстракцию, хоть ATL от Microsoft, хоть VCL из Delphi.
Если программа чисто виндовая (типа того же Process Explorer), зачем лишние абстракции?
Для кроссплатформенности, очевидно же.
Старый Linux - поддерживаю, интересно. Что-нибудь в районе kernel 2.2.x, XFree86 3.3.5 ? А вот смысла поддерживать Win 3.1 не вижу: у него даже среди ретро-геймеров очень невысокая популярность (имхо).
Данный код должен собраться под debian 3. Нужно проверить. Лично мне интересна поддержка windows 3.1. По сути, что бы собрать данный код, нужен 16 битный компилятор с поддержкой namespace и шаблонами. Остальной код это WinAPI, и windows 3.1 его поддерживает. Нужно расставить правильно #ifdef _WIN16 и должно собраться и работать.
Очень странная формула: return rand() % ((max + min) + min);
спасибо интересно, не знаю где достать windows 3 или debian 3, отсюда вопрос в слепую на долгую, а модельки если можно выводить будет 3д как организовывать в старых версиях, старые версии библиотек придётся искать? или как? а если таких нет всё вручную парсить? понятно что держателю формата проще приспособить формат по типо MDL, но всё же, тоесть если через блендер это очень обширно получается ради переноса вниз поддержки - например анимаций, потом там старый XLib - тут я не профи, интересно, но скептично настроен, сейчас задумался о полном сдк на яве (чтоб 3д модельки были - простенький формат с анимациями и свитч анимаций на сцену), но это всё охватить всё равно обширно выйдет
и перенос на бсд не тривиален у явы, там знать надо
Я придерживаюсь С++ 98. Так как существуют +- старые компиляторы которые могут собрать такой код нативно на старой ОС. Но ограничение только С++ 98 только для самой библиотеки. Вы же можете её собирать с любым новым стандартом С++ и с любой новой библиотекой.
К примеру я собираю компилятором msvc 2022 и gcc 13. Но он так же может быть собран компилятором намного старее, к примеру gcc 3.
Поддержку 3d ещё нужно встроить, OpenGL как пример. Что бы можно было создать окно с контекстом OpenGL. Я это запланировал но в будущих статьях.
Ответ: ничего искать не нужно, берете любую С/С++ библиотеку и используете. Намеренно искать старый компилятор не нужно.
понял, спасибо (я сейчас понял как важно тащить функционал. например 3д создание и свитч тут же на сцену, типо 2 окна или вида - выбрали примитив или загруженную модельку в 1 вид она на сцене и в виде анимаций просматриваема и типо простенькие вещи тут же делать и каким-то формтом своим переносным навернуть - но это мечты, ну и получается уже ближе к 3д движку сейчас типо Юнити, там упор другой визуальное программирование даже форматом или каким-то аргументом не оправдан, а при переносе вниз уже оправдано). в целом получается только конфиги будут другими, тоесть всё таки вроде классно если такую реализацию как вы делаете иметь - это вроде тоже аргумент
Я придерживаюсь С++ 98.
Под Win 3.x компилятор с его поддержкой ещё поискать надо...
слово "фреймворк" уже вызывает подозрение санитаров :)
В коде LinuxApi::write
почему идёт каст в uintptr, а возвращается intptr?
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 03 — Начинаем разрабатывать фреймворк