
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.67] |
![]() |
|
Сообщ.
#1
,
|
|
|
В современных ноутбуках делают большое разрешение 1920 x 1080, что заставляет использовать масштабирование 125%, это делает размытые изображения и надписи в программах, которые были написаны ранее под предыдущие версии. Но современные версии программ идут без этих недостатков, все более менее читается и изображения на кнопках нормальные.
У меня проект написан на C, полностью на WinAPI без сторонних библиотек. При масштабе 100% все четко отображается так, как и задумано, на любом комьютере, однако если поставить на ноутбуке масштаб 100% то все настолько мелкое что работать не возможно. Придется вносить изменения в программу для масштаба 125%. Что сделано: Во первых как я это себе представляю нужно программе узнать а какой вообще масштаб, и если не 100% то корректировать пиктограммы, шрифты. Для этого я так понимаю есть DPI. ![]() ![]() #define INITIALX_96DPI 50 #define INITIALY_96DPI 50 #define INITIALWIDTH_96DPI 100 #define INITIALHEIGHT_96DPI 50 // DPI scale the position and size of the button control void UpdateButtonLayoutForDpi(HWND hWnd) { int iDpi = GetDpiForWindow(hWnd); int dpiScaledX = MulDiv(INITIALX_96DPI, iDpi, USER_DEFAULT_SCREEN_DPI); int dpiScaledY = MulDiv(INITIALY_96DPI, iDpi, USER_DEFAULT_SCREEN_DPI); int dpiScaledWidth = MulDiv(INITIALWIDTH_96DPI, iDpi, USER_DEFAULT_SCREEN_DPI); int dpiScaledHeight = MulDiv(INITIALHEIGHT_96DPI, iDpi, USER_DEFAULT_SCREEN_DPI); SetWindowPos(hWnd, hWnd, dpiScaledX, dpiScaledY, dpiScaledWidth, dpiScaledHeight, SWP_NOZORDER | SWP_NOACTIVATE); } ... case WM_CREATE: { // Add a button HWND hWndChild = CreateWindow(L"BUTTON", L"Click Me", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 0, 0, 0, 0, hWnd, (HMENU)NULL, NULL, NULL); if (hWndChild != NULL) { UpdateButtonLayoutForDpi(hWndChild); } } break; case WM_DPICHANGED: { // Find the button and resize it HWND hWndButton = FindWindowEx(hWnd, NULL, NULL, NULL); if (hWndButton != NULL) { UpdateButtonLayoutForDpi(hWndButton); } } break; Вопрос какие способы, или технологии есть чтобы сделать проект более "адаптивным" ? |
![]() |
Сообщ.
#2
,
|
|
Цитата H g @ Вопрос какие способы, или технологии есть чтобы сделать проект более "адаптивным" ? SetProcessDpiAwareness и обработка WM_DPICHANGED, и да, ручное масштабирование через пересчёт MulDiv |
Сообщ.
#3
,
|
|
|
B.V.За совет спасибо
Пока в качестве временной меры нашел способ как запускать приложение в масштабе 100% (На рисунке как запускать Paint из windows xp так чтобы его не размазывало) при том что остальное все в масштабе 125%. Получается одно приложение мелкое но четкое, но если это будет мое приложение, значит я могу просто увеличить размеры контролов, сделать например в натройках (маленькие/большие кнопки и шрифты) Прикреплённая картинка
Но поищу еще способы. |
Сообщ.
#4
,
|
|
|
Цитата H g @ Вопрос какие способы, или технологии есть чтобы сделать проект более "адаптивным" ? Если изображения получились слишком мелкими, значит их надо увеличить. Однако, оценки "большой-маленький" весьма субъективны. Поэтому можно попробовать дать возможность юзеру самому определять размеры. --- Предположим, имеется некий диалог (с контролами) некого формата. Предоставим возможность увеличения/уменьшения окна диалога с сохранением формата и всех пропорций обычным образом - "потянув за край окошка мышью". Значит, надо изготовить такие контролы , включая панель на которой они расположены, которые пропорционально меняют размеры, шрифты, иконки, рисунки, и расположение дочерних контролов (у кого имеются). Если всё получится удачно, смастерим из них библиотеку. как-то так. --- Вариант по-проще. Не даём юзеру менять размеры окна. Делаем это сами. Программа при старте узнаёт параметры скрина, и увеличивает свой диалог по вертикали до, например, 75% вертикального размера экрана. По горизонтали - пропорционально. итд итп. --- Скорее всего, самой большой проблемой будет реализация именно на С. На С++ вероятность успеха резко повышается. Кроме того, у реализации С имеются самые широкие возможности по утечке ресурсов. |