Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 29.12.24 10:33
Оценка:
В винде, как известно, есть проблема масштабирования диалогов: когда система растягивает диалог для отображения в масштабе больше 100%, размеры элементов приходится округлять, из-за чего они нередко отображаются неправильно (чаще всего пропадают последние буквы static text).

Подбирать размеры/расстояния, изменяя их в редакторе, собирая приложение, и запуская его в сеансе с масштабированием, долго и муторно, а включать масштабирование в рабочем сеансе — стремно.

Может, есть какой-нибудь софт, помогающий двигать элементы и менять их размер в активном/отображенном диалоге, с последующим пересчетом позиций/размеров в DLU?
Re: Программы для тестирования размеров элементов диалога
От: kov_serg Россия  
Дата: 29.12.24 10:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В винде, как известно, есть проблема масштабирования диалогов: когда система растягивает диалог для отображения в масштабе больше 100%, размеры элементов приходится округлять, из-за чего они нередко отображаются неправильно (чаще всего пропадают последние буквы static text).


ЕМ>Подбирать размеры/расстояния, изменяя их в редакторе, собирая приложение, и запуская его в сеансе с масштабированием, долго и муторно, а включать масштабирование в рабочем сеансе — стремно.


ЕМ>Может, есть какой-нибудь софт, помогающий двигать элементы и менять их размер в активном/отображенном диалоге, с последующим пересчетом позиций/размеров в DLU?


Тебе не понравиться — WebView
Re[2]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 29.12.24 10:48
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Тебе не понравиться — WebView


А куда там лошадь запрягать WinAPI прикручивать?
Re[3]: Программы для тестирования размеров элементов диалога
От: kov_serg Россия  
Дата: 29.12.24 15:18
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

_>>Тебе не понравиться — WebView


ЕМ>А куда там лошадь запрягать WinAPI прикручивать?

Как куда прямо на диалог кладёте ActiveX и алга

https://learn.microsoft.com/en-us/cpp/mfc/reference/creating-a-web-browser-style-mfc-application?view=msvc-170
https://learn.microsoft.com/en-us/cpp/mfc/reference/chtmlview-class?view=msvc-170
https://www.codeproject.com/Articles/7710/Creating-Web-style-GUI-in-MFC-applications
Re[4]: Программы для тестирования размеров элементов диалога
От: Alekzander  
Дата: 29.12.24 16:53
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>https://learn.microsoft.com/en-us/cpp/mfc/reference/creating-a-web-browser-style-mfc-application?view=msvc-170

_>https://learn.microsoft.com/en-us/cpp/mfc/reference/chtmlview-class?view=msvc-170
_>https://www.codeproject.com/Articles/7710/Creating-Web-style-GUI-in-MFC-applications

Но это будет устаревшее говно Trident. Хотя мои приложения, которым по 20 лет, до сих пор прекрасно работают, но писать новое я б на нём не стал.

Есть WebView2, на Хромиуме, но под 11-ую. Есть CEF. И есть Sciter. Бизнес-логику, и ту часть WinAPI, которое не про UI, можно вызывать из скриптовых обработчиков событий.

Но сначала один вопрос ТСу. Как у него так получается, что пропадают последние буквы static text, если localizable UI предполагает немецкий язык и очень большой запас длины? На немецком пропадают? Так им и надо, фашистам. Но если пропадает на других языках, надо просто запас сделать побольше. Сейчас уже трудно найти винапишную программу в виндах, но я взял регедит и сфоткал диалог оттуда с PE (это та же функция, что в Spy), вот какой запас по ширине:



Но и то, это плохо сделано. Надо было на всю ширину диалога. К чему эта странная экономия?
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[4]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 29.12.24 17:42
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>прямо на диалог кладёте ActiveX и алга


Мне бы хотелось именно того, что я изначально описал. Это ж не только для своего — есть и другие приложения, которые портятся при масштабировании.

Есть такое, или никто не сподобился?
Re[5]: Программы для тестирования размеров элементов диалога
От: kov_serg Россия  
Дата: 29.12.24 20:58
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Мне бы хотелось именно того, что я изначально описал. Это ж не только для своего — есть и другие приложения, которые портятся при масштабировании.


ЕМ>Есть такое, или никто не сподобился?


А всем лень разбираться. Там же и масштабирование экранов и dpi видео драйвера и размеры шрифтов плюс костыли для совместимости и ещё сверху бантик с манифестами.
И всё это вместо банальной фунции получения физических размеров в мм

https://mariusbancila.ro/blog/2021/05/19/how-to-build-high-dpi-aware-native-desktop-applications/
Отредактировано 29.12.2024 21:29 kov_serg . Предыдущая версия .
Re[5]: Программы для тестирования размеров элементов диалога
От: bnk СССР http://unmanagedvisio.com/
Дата: 29.12.24 21:31
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Мне бы хотелось именно того, что я изначально описал. Это ж не только для своего — есть и другие приложения, которые портятся при масштабировании.

ЕМ>Есть такое, или никто не сподобился?

AFAIK для воспроизведения большинства Win API (GDI) проблем с HiDPI нужен реальный 4к+ монитор к сожалению, без него их не воспроизвести. Если нет — идти в магазин на амазон и покупать.
С ним они элементарно воспроизводятся просто установкой масштаба. Студия умеет переключаться (devenv /noscale). С "обычным" монитором эти проблемы не воспроизводятся, какой бы ты масштаб ни ставил.
Насколько я понял, поскольку проблемы зарыты в системе, пользовательского софта для их эмуляции AFAIK нет (я искал)

Если заинтересует WebView2, у него есть нормальный WINAPI C++ интерфейс (он первичен на самом деле). Встроен в систему начиная с Win11
https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/win32

ActiveX (Web Browser Control) устарел на 20 лет, там IE11 максимум (да и тот с приседаниями), на котором уже ничего практически не работает.
Это не учитывая проблемы которые всегда были (типа ActiveX security warning)

CEF тебе скорее всего не понравится (50мб на ровном месте за здорово живешь)

Sciter (здесь) в принципе норм, я на нем делал UI, небольшой и достаточно удобный для плюсов,
минус тот, что почти все современные готовые javasript web-ui библиотеки на нем не работают (даже jQuery)
Андрей упирался рогом годами со своим tiscript, ну вот и результат. Невозможно объять необъятное.
Отредактировано 29.12.2024 22:05 bnk . Предыдущая версия . Еще …
Отредактировано 29.12.2024 22:02 bnk . Предыдущая версия .
Отредактировано 29.12.2024 22:01 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:59 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:58 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:54 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:49 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:48 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:48 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:36 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:35 bnk . Предыдущая версия .
Отредактировано 29.12.2024 21:33 bnk . Предыдущая версия .
Re: Программы для тестирования размеров элементов диалога
От: TheBeginner  
Дата: 30.12.24 08:42
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В винде, как известно, есть проблема масштабирования диалогов: когда система растягивает диалог для отображения в масштабе больше 100%, размеры элементов приходится округлять, из-за чего они нередко отображаются неправильно (чаще всего пропадают последние буквы static text).


Эх, Win32 и его "поддержка" High DPI. Мало того, что надо все ручками делать, например, если рисовать GDI линию в один пиксел, то на масштабе до 150 рисуем в один пиксел, от 150 до 249 — в два и тд., самому изменить размеры окон, выбирать нужный набор графики (если растровая) под каждый масштаб, так еще диалоги живут своей жизнью, так как там не пикселы, а dialog units или как их там

Посмотрите на XUILIB от нашего форумчанина:
https://github.com/tordex/xuilib

Там как раз есть изменение размера контролов при изменении текста в них.

What is XUILIB?
XUILIB is the open source XML User Interface Library. XUILIB allow you to define the dialog boxes using the XML files. XUILIB XML files syntax is very similar to html. Generally you don't need to define the element's sizes, XUILIB have the build-in layout manager, so all elemnts will be at right positions, even the text labels are changed.

Main Features
All controls are the native Windows controls so there no problems with the XP/Vista themes
Automatically calculated layout
Support standards for control sizes and spaces between controls
External localization files in the XML format
Open Source

Re[6]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.12.24 19:59
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>всем лень разбираться.


В чем разбираться? Для описанной задачи достаточно как-то указать требуемый элемент, и вызывать для него SetWindowPos. Даже в процесс встраиваться не нужно.
Re[6]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.12.24 20:03
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>AFAIK для воспроизведения большинства Win API (GDI) проблем с HiDPI нужен реальный 4к+ монитор к сожалению, без него их не воспроизвести.


Чем реальный монитор отличается от виртуального экрана VM? Монитор-то никак не обрабатывает изображение.

bnk>С ним они элементарно воспроизводятся просто установкой масштаба.


Те проблемы, о которых я писал, элементарно воспроизводятся на любом экране, хоть реальном, хоть виртуальном, установкой масштаба 125%.

Про библиотеки я в курсе, но мне пока нужно всего лишь подобрать размеры/положения элементов, чтоб не сильно съезжали при типовом масшабировании.
Re[2]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.12.24 20:06
Оценка:
Здравствуйте, TheBeginner, Вы писали:

TB>если рисовать GDI линию в один пиксел, то на масштабе до 150 рисуем в один пиксел, от 150 до 249 — в два и тд.


Не понял. Что значит "линию в один пиксел" — указывать единичную ширину в функциях рисования, или чтоб она занимала один пиксел на экране?

, самому изменить размеры окон, выбирать нужный набор графики (если растровая) под каждый масштаб, так еще диалоги живут своей жизнью, так как там не пикселы, а dialog units или как их там

TB>Посмотрите на XUILIB от нашего форумчанина:


Спасибо, погляжу.
Re[7]: Программы для тестирования размеров элементов диалога
От: bnk СССР http://unmanagedvisio.com/
Дата: 30.12.24 20:10
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

bnk>>AFAIK для воспроизведения большинства Win API (GDI) проблем с HiDPI нужен реальный 4к+ монитор к сожалению, без него их не воспроизвести.


ЕМ>Чем реальный монитор отличается от виртуального экрана VM? Монитор-то никак не обрабатывает изображение.


bnk>>С ним они элементарно воспроизводятся просто установкой масштаба.


ЕМ>Те проблемы, о которых я писал, элементарно воспроизводятся на любом экране, хоть реальном, хоть виртуальном, установкой масштаба 125%.


У меня не воспроизводились, поэтому и говорю. Возможно специфика приложения

ЕМ>Про библиотеки я в курсе, но мне пока нужно всего лишь подобрать размеры/положения элементов, чтоб не сильно съезжали при типовом масшабировании.


Если у тебя самодостаточное приложение (EXE а не DLL), может тебе просто в манифест прописать что надо
https://learn.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows
Отредактировано 30.12.2024 20:11 bnk . Предыдущая версия .
Re[2]: Программы для тестирования размеров элементов диалога
От: Философ Ад http://vk.com/id10256428
Дата: 30.12.24 21:32
Оценка:
Здравствуйте, TheBeginner, Вы писали:

TB>Эх, Win32 и его "поддержка" High DPI. Мало того, что надо все ручками делать...


Причём тут Win32 и зачем всё делать руками?
Неуж-то Win32 ограничивается GDI?
Всё сказанное выше — личное мнение, если не указано обратное.
Re: Программы для тестирования размеров элементов диалога
От: Философ Ад http://vk.com/id10256428
Дата: 30.12.24 21:35
Оценка: -1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В винде, как известно, есть проблема масштабирования диалогов...

ЕМ>...в активном/отображенном диалоге, с последующим пересчетом позиций/размеров в DLU?

Вы всё ещё про диалоги. Неужиле для С++ ничего лучше MFC не придумали?

------------
Я бы не стал относить вопрос из сабжа к Win32 — это вопрос про MFC.
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 30.12.2024 21:42 Философ . Предыдущая версия .
Re: Программы для тестирования размеров элементов диалога
От: пффф  
Дата: 30.12.24 21:42
Оценка: -1 :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Может, есть какой-нибудь софт, помогающий двигать элементы и менять их размер в активном/отображенном диалоге, с последующим пересчетом позиций/размеров в DLU?


А это кого-то, кроме тебя, беспокоит?
Re[7]: Программы для тестирования размеров элементов диалога
От: пффф  
Дата: 30.12.24 21:43
Оценка: -1 :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В чем разбираться? Для описанной задачи достаточно как-то указать требуемый элемент, и вызывать для него SetWindowPos. Даже в процесс встраиваться не нужно.



Ну и сделай
Re[2]: Программы для тестирования размеров элементов диалога
От: пффф  
Дата: 30.12.24 21:46
Оценка: -1 :)
Здравствуйте, TheBeginner, Вы писали:

TB>Посмотрите на XUILIB от нашего форумчанина:



Хуйлиб? Хм... Звучит интересно...
Re[6]: Программы для тестирования размеров элементов диалога
От: Философ Ад http://vk.com/id10256428
Дата: 30.12.24 21:47
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>AFAIK для воспроизведения большинства Win API (GDI) проблем с HiDPI нужен реальный 4к+ монитор к сожалению, без него их не воспроизвести...


У тебя видюха какая? Не пробовал виртуальные разрешения (забыл как правильно называются) от NVIDIA?
Я, кстати, гуй делал, но у меня никогда не было 4к монитора — даже не видел особой необходимости. И когда сдавал монитор с прошлой работы, крепко задумался о параметрах монитора для покупки на замену. По итогу не стал покупать 4к.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[7]: Программы для тестирования размеров элементов диалога
От: bnk СССР http://unmanagedvisio.com/
Дата: 30.12.24 21:55
Оценка:
Здравствуйте, Философ, Вы писали:

bnk>>AFAIK для воспроизведения большинства Win API (GDI) проблем с HiDPI нужен реальный 4к+ монитор к сожалению, без него их не воспроизвести...


Ф>У тебя видюха какая? Не пробовал виртуальные разрешения (забыл как правильно называются) от NVIDIA?


Сейчас встройка AMD (Radeon 780). Но не думаю что есть разница.
Когда подключаешь монитор 4к, разница в том как редтерится WinAPI была видна просто невооруженным глазом. Я не знаю почему.

Ф>Я, кстати, гуй делал, но у меня никогда не было 4к монитора — даже не видел особой необходимости. И когда сдавал монитор с прошлой работы, крепко задумался о параметрах монитора для покупки на замену. По итогу не стал покупать 4к.


У меня тоже сейчас "обычное" (49" 5K), HiDPI 4K я уже продал

Потому тема и интересна, как эти проблемы воспроизвести.
Изменением масштаба у меня обрезание НЕ воспроизводится, все нормально масшатбируется.
Re[8]: Программы для тестирования размеров элементов диалога
От: Философ Ад http://vk.com/id10256428
Дата: 30.12.24 21:59
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Когда подключаешь монитор 4к, разница в том как редтерится WinAPI была видна просто невооруженным глазом. Я не знаю почему.


Разница по сравнению чего с чем? Я про виртуальные разрешения спрашивал. Если такая фича есть в АМДшных дравах, ты пробовал это?

bnk>У меня тоже сейчас "обычное" (49" 5K), HiDPI 4K я уже продал


Зачем? оно стоит того?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[9]: Программы для тестирования размеров элементов диалога
От: bnk СССР http://unmanagedvisio.com/
Дата: 30.12.24 22:03
Оценка:
Здравствуйте, Философ, Вы писали:

bnk>>Когда подключаешь монитор 4к, разница в том как редтерится WinAPI была видна просто невооруженным глазом. Я не знаю почему.


Ф>Разница по сравнению чего с чем? Я про виртуальные разрешения спрашивал. Если такая фича есть в АМДшных дравах, ты пробовал это?


Да. Никакой разницы, просто скорл десктопа.

bnk>>У меня тоже сейчас "обычное" (49" 5K), HiDPI 4K я уже продал


Ф>Зачем? оно стоит того?


Вместо двух мониторов и стоек — один. Еще удобно делать 3-way-merge.
Re[2]: Программы для тестирования размеров элементов диалога
От: Философ Ад http://vk.com/id10256428
Дата: 30.12.24 22:15
Оценка:
Здравствуйте, пффф, Вы писали:

П>А это кого-то, кроме тебя, беспокоит?


Теоретически эта проблема должна волновать динозавров, которые по какой-то загадочной причине не вымерли, и продолжают писать на MFC. Динозавры при этом должны ещё и о hiDPI парится, т.е. писать для достаточно большой аудитории.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[8]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 10:00
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>У меня не воспроизводились, поэтому и говорю. Возможно специфика приложения


У Вас диалоги статические (загружаемые непосредственно из ресурсов) или динамические (создаваемые/настраиваемые в процессе выполнения)?

Если статические, попробуйте, например, Static Text слева от Edit/Combo Box, чтоб при масштабе 100% текст отображался полностью, и заканчивался где-то в 6-7 точках от следующего элемента. При масштабе 125% такой текст обрезается и в Win7, и в Win8, и в Win10/11, независимо от наличия/отсутствия манифестов поддержки DPI. Если увеличивать интервал до 8-10 точек, то в масштабе 100% образуется слишком широкий зазор.

bnk>просто в манифест прописать что надо


Дык, прописано, не помогает. Пока не было прописано — масштабировало с замыливанием. После прописывания замыливание пропало, но тексты все равно обрезаются. Я так понимаю, это все от кривого пересчета DLU в точки.
Re[3]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 10:04
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Причём тут Win32


При том, что этим занимается Win32.

Ф>и зачем всё делать руками?


Например, чтоб не тащить в проект библиотеки "на все случаи жизни" (особенно с "экосистемой", вроде Qt), когда требуется всего-то умеренная адаптация к механизмам, реализованным в ОС.

Ф>Неуж-то Win32 ограничивается GDI?


Окна и диалоги — это уже не чистый GDI, а надстройка над ним.

Что в Win32 есть адекватного для решения описанных проблем?
Re[2]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 10:05
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Вы всё ещё про диалоги.


Именно.

Ф>Неужиле для С++ ничего лучше MFC не придумали?


А вот про MFC я ничего не говорил.

Ф>Я бы не стал относить вопрос из сабжа к Win32 — это вопрос про MFC.


А я бы не стал этого утверждать, толком не понимая, что такое MFC.
Re[7]: Программы для тестирования размеров элементов диалога
От: kov_serg Россия  
Дата: 31.12.24 10:49
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:


ЕМ>В чем разбираться? Для описанной задачи достаточно как-то указать требуемый элемент, и вызывать для него SetWindowPos. Даже в процесс встраиваться не нужно.


А вам надо для своего процесса или для чужого?
Re[8]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 11:02
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>А вам надо для своего процесса или для чужого?


В первую очередь — для своих, но и для чужих бывает нужно.
Re[9]: Программы для тестирования размеров элементов диалога
От: qaz77  
Дата: 31.12.24 11:51
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Если статические, попробуйте, например, Static Text слева от Edit/Combo Box, чтоб при масштабе 100% текст отображался полностью, и заканчивался где-то в 6-7 точках от следующего элемента. При масштабе 125% такой текст обрезается и в Win7, и в Win8, и в Win10/11, независимо от наличия/отсутствия манифестов поддержки DPI. Если увеличивать интервал до 8-10 точек, то в масштабе 100% образуется слишком широкий зазор.


ЕМ>Я так понимаю, это все от кривого пересчета DLU в точки.


В DLU задается размер элемента, а GDI рендерит текст по размеру в логических пикселях.
Т.е. не "вписывает" каждую буковку в DLU-шную сетку диалога.
Из-за растризации каждой буквы и связанного с ней округления накапливается разница в длине.
Растризация выполняется в физические пиксели монитора, а не в логические.
Например, линия в 1 логический пиксель при масштабе 200% растризуется в 2 физических пикселя, а при 125% — в один.
Эта проблема GDI особенно сильно вылазила для печати и предварительного просмотра, где масштаб меняется в широких пределах, а также DPI принтера может быть очень разным.

И второй эффект, который может влиять даже сильнее округления при растризации.
Размер шрифта диалога задается в поинтах, которые также привязаны к логическим пикселям в условиях фиксированного DPI.
В структуре LOGFONT за размер отвечает поле lfHeight, где как раз логические пиксели.
И тут просто не хватает точности указания этой высоты. Например, -10 и -12 (в норме она отрицательная).
Если бы они использовали логические пиксели умноженные на 10 хотя бы, то можно было бы задавать -105, например.
Допустим шрифт у нас с высотой -10 на 100%, на 125% он будет -12, а не -12.5 (а это уже 4% разницы).
Re: Программы для тестирования размеров элементов диалога
От: fk0 Россия https://fk0.name
Дата: 31.12.24 12:00
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В винде, как известно, есть проблема масштабирования диалогов: когда система растягивает диалог для отображения в масштабе больше 100%, размеры элементов приходится округлять, из-за чего они нередко отображаются неправильно (чаще всего пропадают последние буквы static text).


В нормальных графических системах (HTML, Gtk, Tk, Qt...) координаты не гвоздями
прибиваются, а есть так называемая "упаковка", когда есть набор правил описывающих
как будут рстягиваться и позиционироваться элементы. При этом размеры самих элементов
вычисляются динамически, размеры шрифтов заранее не известны и т.п. Обычно всё
выравнивается ну примерно как текст в редакторе wordpad: по какому-либо краю, с
растяжкой или нет... И проблем с тем, что что-то куда-то наезжает -- нет.
Re[9]: Программы для тестирования размеров элементов диалога
От: kov_serg Россия  
Дата: 31.12.24 12:04
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В первую очередь — для своих, но и для чужих бывает нужно.


Тогда копайте отсюда
Re[3]: Программы для тестирования размеров элементов диалога
От: Философ Ад http://vk.com/id10256428
Дата: 31.12.24 13:15
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

Ф>>Неужиле для С++ ничего лучше MFC не придумали?

ЕМ>А вот про MFC я ничего не говорил.

А что ещё это может быть, если уж речь про диалоги!? Кроме как в контексте MFC я нигде их больше не встречал.

ЕМ>А я бы не стал этого утверждать, толком не понимая, что такое MFC.


Я понимаю что это: кривая минималистичная надстройка над Win32API. Это единственное место, где я видел диалоги. Я бы сказал, что эта часть API оставлена для обратной совместимости — чтоб старый софт работал. Давно уже это пора пометить как obsolete, а лучше deprecated — чтоб варнинги вываливало.

UPD:

Many Windows APIs do not have an DPI context

Many legacy Windows APIs do not include a DPI or HWND context as part of their interface. As a result, developers often have to do additional work to handle the scaling of any DPI-sensitive information, such as sizes, points, or icons. As an example, developers using LoadIcon must either bitmap stretch loaded icons or use alternate APIs to load correctly-sized icons for the appropriate DPI, such as LoadImage.

https://learn.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows?redirectedfrom=MSDN#testing-your-changes

Вот эти самые API я бы и назвал legacy. Более того, если рисовать с помощью direct2d или direct3d, то DPI будет учитываться автоматически. Например, в WPF с этим вообще проблем нет — оно не пиксели использует.
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 31.12.2024 14:05 Философ . Предыдущая версия .
Re[9]: Программы для тестирования размеров элементов диалога
От: bnk СССР http://unmanagedvisio.com/
Дата: 31.12.24 14:16
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

bnk>>У меня не воспроизводились, поэтому и говорю. Возможно специфика приложения


ЕМ>У Вас диалоги статические (загружаемые непосредственно из ресурсов) или динамические (создаваемые/настраиваемые в процессе выполнения)?


WinForms (.NET)

ЕМ>Если статические, попробуйте, например, Static Text слева от Edit/Combo Box, чтоб при масштабе 100% текст отображался полностью, и заканчивался где-то в 6-7 точках от следующего элемента. При масштабе 125% такой текст обрезается и в Win7, и в Win8, и в Win10/11, независимо от наличия/отсутствия манифестов поддержки DPI. Если увеличивать интервал до 8-10 точек, то в масштабе 100% образуется слишком широкий зазор.


Поставь метки НАД контролами и не парься. Я перевел когда делал локализацию на немецкий. Все равно там нифига не входит.
125% — смешно. На Microsoft Surface 200% стотит чуть ли не по умолчанию.

bnk>>просто в манифест прописать что надо


ЕМ>Дык, прописано, не помогает. Пока не было прописано — масштабировало с замыливанием. После прописывания замыливание пропало, но тексты все равно обрезаются. Я так понимаю, это все от кривого пересчета DLU в точки.


Там размер шрифта диалога еще нужно выставить. DLU от него считается. Я бросил всю эту возню, переделал на Web UI.
Отредактировано 31.12.2024 14:17 bnk . Предыдущая версия .
Re[10]: Программы для тестирования размеров элементов диалога
От: Философ Ад http://vk.com/id10256428
Дата: 31.12.24 15:03
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Там размер шрифта диалога еще нужно выставить. DLU от него считается. Я бросил всю эту возню, переделал на Web UI.


Если изначально был .NET (его можно было), то почему Web UI, а не WPF?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[11]: Программы для тестирования размеров элементов диалог
От: bnk СССР http://unmanagedvisio.com/
Дата: 31.12.24 16:14
Оценка:
Здравствуйте, Философ, Вы писали:

bnk>>Там размер шрифта диалога еще нужно выставить. DLU от него считается. Я бросил всю эту возню, переделал на Web UI.


Ф>Если изначально был .NET (его можно было), то почему Web UI, а не WPF?


Изначально был старый софт (больше 15 лет). Web UI в основном потому что WPF нормально готовить не умею.
Отредактировано 31.12.2024 16:16 bnk . Предыдущая версия . Еще …
Отредактировано 31.12.2024 16:16 bnk . Предыдущая версия .
Re[12]: Программы для тестирования размеров элементов диалог
От: Философ Ад http://vk.com/id10256428
Дата: 31.12.24 16:37
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Изначально был старый софт (больше 15 лет). Web UI в основном потому что WPF нормально готовить не умею.


А Web-UI можешь нормально готовить? Некоторые думают, что могут.
  сможешь название программы прочитать?

Меня уже слегка достали люди, которые думают, что всё просто и тут всё сделать элементарно — натыкал и работает.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 16:46
Оценка:
Здравствуйте, fk0, Вы писали:

fk0>В нормальных графических системах (HTML, Gtk, Tk, Qt...) координаты не гвоздями прибиваются, а есть так называемая "упаковка"


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

Когда-то я делал небольшую софтину для расстановки дочерних окон в MDI-приложениях по схожим принципам, то ли ее перепилить под это дело...
Re[10]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 16:58
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Тогда копайте отсюда


А как мне это поможет в изначально озвученной цели? Как рисовать DPI-aware окна, я примерно представляю, но пока-то задача тупо адаптировать существующие простые диалоги к системному масштабированию.
Re[13]: Программы для тестирования размеров элементов диалог
От: bnk СССР http://unmanagedvisio.com/
Дата: 31.12.24 17:04
Оценка:
Здравствуйте, Философ, Вы писали:

bnk>>Изначально был старый софт (больше 15 лет). Web UI в основном потому что WPF нормально готовить не умею.


Ф>[cut=сможешь название программы прочитать?]


Не, не могу, оно замыленное. Это Скайп?

Ф>Меня уже слегка достали люди, которые думают, что всё просто и тут всё сделать элементарно — натыкал и работает.


Ну так так оно и есть — сказал GPT сделай мне красивую страничку, он сделал
Re[4]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 17:16
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>А что ещё это может быть, если уж речь про диалоги!?


Это может быть чистый хардкор WinAPI.

Ф>Вот эти самые API я бы и назвал legacy.


Так все остальные только через них и работают, с небольшими исключениями.
Re[14]: Программы для тестирования размеров элементов диалог
От: Философ Ад http://vk.com/id10256428
Дата: 31.12.24 17:18
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Не, не могу, оно замыленное. Это Скайп?


Open Video Downloader.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[10]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.12.24 19:17
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>125% — смешно. На Microsoft Surface 200% стотит чуть ли не по умолчанию.


Так погрешности ж не увеличиваются с ростом масштаба. Если оставлять достаточные промежутки, на любом масштабе искажений нет. Задача — подобрать величину промежутков.

bnk>Там размер шрифта диалога еще нужно выставить. DLU от него считается.


Угу, у меня они стандартные везде.
Re[11]: Программы для тестирования размеров элементов диалога
От: bnk СССР http://unmanagedvisio.com/
Дата: 31.12.24 20:50
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Так погрешности ж не увеличиваются с ростом масштаба. Если оставлять достаточные промежутки, на любом масштабе искажений нет. Задача — подобрать величину промежутков.


Я имел в виду вот
Re[12]: Программы для тестирования размеров элементов диалога
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 01.01.25 11:50
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Я имел в виду вот

bnk>Image: 2024_11_02_21_50_15_image.png

Это я понял. Не везде удобно так делать (в основном только с широкими полями, коих у меня мало), но в целом разумно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.