как расчитать размеры элементов управления в Window9
|
|
haav | Дата: Вторник, 08.02.2022, 11:05 | Сообщение # 16 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| И дело ведь в конечном итоге в том, что все эти потуги раздуют код. Можно конечно писать как VB6 , декларируя каждую функцию и структуру , но ведь это канитель. Для меня даже то , что разрабы FB засунули информация о линковке нужных библиотек в заголовки - уже кажется хорошим подспорьем , в отличии от СИ и других приплюснутых , где каждую либу надо прописывать при компиляции. Да , в среднем например в VB6 компиляция будет быстрее за счет указания только необходимого и это хорошо видно , когда подключается в FB куча заголовков. Но с другой стороны , не нужно каждый раз разыскивать декларации и меньше ошибок.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
zamabuvaraeu | Дата: Вторник, 08.02.2022, 14:05 | Сообщение # 17 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: 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 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: 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
Статус: Offline
| Цитата Если старый API на винде начинают колупать , все пиши пропало. Весь старый , но нередко качественный софт уйдет на помойку. В общем плохая новость. Насчёт совместимости. Как‐то в 2021 году пришлось читать как на винапи программировать ListView и рисовать средствами GDI. Нашёл какой‐то сайт «Библиотека братьев Фроловых», всё замечательно, код работает, перья‐кисти закрашивают окружности и квадраты, строки добавляются в список. А потом до меня доходит, что этот код под виндоуз 95 или даже 16‐битную виндоуз. Вот она какая совместимость!
С другой стороны, корпорация Микрософт не может вечно жить с API из 1985 года, приходится добавлять новое и отказываться от старого.
|
|
| |
haav | Дата: Вторник, 08.02.2022, 20:48 | Сообщение # 20 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Цитата zamabuvaraeu ( ) С другой стороны, корпорация Микрософт не может вечно жить с API из 1985 года, приходится добавлять новое и отказываться от старого.
Возможно , но для этого надо что-то иметь на замену и это что-то должно быть лучше. Пока что , то что они предлагали за последние лет 10, не впечатляет. А если еще совместимость потеряют , сколько они протянут...
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
|