FreeBasic
Главная
Вход
Регистрация
Понедельник, 30.12.2024, 18:53Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
как расчитать размеры элементов управления в Window9
haavДата: Вторник, 08.02.2022, 11:05 | Сообщение # 16
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
И дело ведь в конечном итоге в том, что все эти потуги раздуют код. Можно конечно писать как VB6 , декларируя каждую функцию и структуру , но ведь это канитель. Для меня даже то , что разрабы FB засунули информация о линковке нужных библиотек в заголовки - уже кажется хорошим подспорьем , в отличии от СИ и других приплюснутых , где каждую либу надо прописывать при компиляции. Да , в среднем например в VB6 компиляция будет быстрее за счет указания только необходимого и это хорошо видно , когда подключается в FB куча заголовков. Но с другой стороны , не нужно каждый раз разыскивать декларации и меньше ошибок.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Вторник, 08.02.2022, 14:05 | Сообщение # 17
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
>Теперь вопрос: нахера засунули макрос , если различия для разных систем задаются числом в параметре cbSize?

Это не изобретение FreeBASIC, и он тут не добавляет отсебятины, он просто транслирует Си‐заголовочники в свой код как есть.

С другой стороны, почему вообще в Си‐мире принято для разных целей компиляции использовать макросы? Так делают, чтобы переход на новую версию был легче, чтобы не переписывать имена структур. ВинАПИ уже однажды переезжала из 16‐битного мира в 32‐битный, и чтобы из одних и тех же исходных кодов получать разные екзешники, решили версии системы прописывать как флаги компилятора.

Вообще, это частный случай когда функции разных версий ведут себя одинаково для таких полиморфных структур с общими полями. В общем случае поведение функций может быть не таким как в старой версии.

Функции системы жестоко проверяют cbSize для своей версии системы. Например, в MENUITEMINFO поле hbmpItem появилось только начиная с Windows 2000. Если взять версию структуры для Windows 2000 и передать её на Windows NT 4, то вызов завершится ошибкой, потому что размер не совпадает с ожидаемым.

Вот мне как‐то понадобилось текстовое поле со всплывающей подсказкой в виде воздушного шара и форсированием фокуса, однако такое поведение (Edit_ShowBalloonTip) есть только для текстовых полей из шестой версии ComCtl32.dll, то есть начиная с Икспи. И что делать в таком случае? Проверять версию системы, показывать воздушный шар, а если запущено на 2000 — показывать ошибку «Программа работает только на XP»?

Добавлено (08.02.2022, 14:38)
---------------------------------------------
Вот тут Реймонд Чэн говорит, почему функции жестоко проверяют размер cbSize у структур
Блог GunSmoker-а (переводы): Почему размеры записей проверяются строго? (transl-gunsmoker.ru)

Добавлено (08.02.2022, 15:02)
---------------------------------------------
Между прочим, начиная с 8.1 функции GetVersion и GetVersionEx объявлены устаревшими. Вместо них следует использовать VerifyVersionInfo.
В будущем GetVersion и GetVersionEx могут быть удалены.
https://docs.microsoft.com/en-us....oninfoa

 
haavДата: Вторник, 08.02.2022, 16:37 | Сообщение # 18
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Цитата zamabuvaraeu ()
И что делать в таком случае? Проверять версию системы, показывать воздушный шар, а если запущено на 2000 — показывать ошибку «Программа работает только на XP»?


Если это готовая программа (EXE), то всегда ищется решение , которое работает на самой младшей необходимой версии , несмотря на удобство , рюшечки и помпушешки. При невозможности , пишется кустарный вариант (хотя бы для не поддерживаемой версии). Если это не критично , то данный функционал вообще просто отключается. Я думаю тебе это и так очевидно.

Цитата
Между прочим, начиная с 8.1 функции GetVersion и GetVersionEx объявлены устаревшими. Вместо них следует использовать VerifyVersionInfo.
В будущем GetVersion и GetVersionEx могут быть удалены.


Ну что тут скажешь... Похоже мелкософт набрала себе на работу кого-то из группы гномоделов. Эти ребята любят по любому поводу устраивать перетряхивание API , даже там где без этого можно легко обойтись. Вон сейчас с новым гтк4 уже объявили:

Цитата
Каждые 6 месяцев новый выпуск (Gtk 4.2, Gtk 4.4, Gtk 4.6) будет ломать API и ABI по сравнению с предыдущим выпуском.


https://blogs.gnome.org/desrt/2016/06/13/gtk-4-0-is-not-gtk-4/

Да это сообщение старое , но эти ребята и с gtk2 , а особенно с gtk3 не сильно стеснялись. Надо что-то вырезать , хрясь и софт разработчиков, использующий данный функционал , повалился в тартарары. И ведь не каждый может постоянно отслеживать все изменения и главное не всегда можно легко найти замену. Да и настрой пропадает из-за такого отношения. Это основная причина , почему я до сих пор сижу на gtk2. В ней уже ничего не копают , а линуксы ее еще пока поддерживают.

Если старый API на винде начинают колупать , все пиши пропало. Весь старый , но нередко качественный софт уйдет на помойку. В общем плохая новость.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Вторник, 08.02.2022, 19:07 | Сообщение # 19
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Цитата
Если старый API на винде начинают колупать , все пиши пропало. Весь старый , но нередко качественный софт уйдет на помойку. В общем плохая новость.
Насчёт совместимости.
Как‐то в 2021 году пришлось читать как на винапи программировать ListView и рисовать средствами GDI. Нашёл какой‐то сайт «Библиотека братьев Фроловых», всё замечательно, код работает, перья‐кисти закрашивают окружности и квадраты, строки добавляются в список. А потом до меня доходит, что этот код под виндоуз 95 или даже 16‐битную виндоуз. Вот она какая совместимость!

С другой стороны, корпорация Микрософт не может вечно жить с API из 1985 года, приходится добавлять новое и отказываться от старого.
 
haavДата: Вторник, 08.02.2022, 20:48 | Сообщение # 20
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Цитата zamabuvaraeu ()
С другой стороны, корпорация Микрософт не может вечно жить с API из 1985 года, приходится добавлять новое и отказываться от старого.


Возможно , но для этого надо что-то иметь на замену и это что-то должно быть лучше. Пока что , то что они предлагали за последние лет 10, не впечатляет. А если еще совместимость потеряют , сколько они протянут...


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: