На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Как бороться за четкость контроллов , Ноутбук, разрешение 1920 x 1080, масштабирование 125%
    В современных ноутбуках делают большое разрешение 1920 x 1080, что заставляет использовать масштабирование 125%, это делает размытые изображения и надписи в программах, которые были написаны ранее под предыдущие версии. Но современные версии программ идут без этих недостатков, все более менее читается и изображения на кнопках нормальные.

    У меня проект написан на C, полностью на WinAPI без сторонних библиотек. При масштабе 100% все четко отображается так, как и задумано, на любом комьютере, однако если поставить на ноутбуке масштаб 100% то все настолько мелкое что работать не возможно. Придется вносить изменения в программу для масштаба 125%.

    Что сделано:
    Во первых как я это себе представляю нужно программе узнать а какой вообще масштаб, и если не 100% то корректировать пиктограммы, шрифты. Для этого я так понимаю есть DPI.
    ExpandedWrap disabled
      #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;

    Вопрос какие способы, или технологии есть чтобы сделать проект более "адаптивным" ?
      Цитата H g @
      Вопрос какие способы, или технологии есть чтобы сделать проект более "адаптивным" ?

      SetProcessDpiAwareness и обработка WM_DPICHANGED, и да, ручное масштабирование через пересчёт MulDiv
        B.V.За совет спасибо
        Пока в качестве временной меры нашел способ как запускать приложение в масштабе 100% (На рисунке как запускать Paint из windows xp так чтобы его не размазывало) при том что остальное все в масштабе 125%. Получается одно приложение мелкое но четкое, но если это будет мое приложение, значит я могу просто увеличить размеры контролов, сделать например в натройках (маленькие/большие кнопки и шрифты)
        Прикреплённая картинка
        Прикреплённая картинка

        Но поищу еще способы.
        Сообщение отредактировано: H g -
          Цитата H g @
          Вопрос какие способы, или технологии есть чтобы сделать проект более "адаптивным" ?

          Если изображения получились слишком мелкими, значит их надо увеличить.
          Однако, оценки "большой-маленький" весьма субъективны.
          Поэтому можно попробовать дать возможность юзеру самому определять
          размеры.
          ---
          Предположим, имеется некий диалог (с контролами) некого формата.
          Предоставим возможность увеличения/уменьшения окна диалога
          с сохранением формата и всех пропорций обычным образом - "потянув за край окошка мышью".
          Значит, надо изготовить такие контролы ,
          включая панель на которой они расположены, которые пропорционально меняют размеры,
          шрифты, иконки, рисунки, и расположение дочерних контролов (у кого имеются).
          Если всё получится удачно, смастерим из них библиотеку.
          как-то так.
          ---
          Вариант по-проще. Не даём юзеру менять размеры окна. Делаем это сами.
          Программа при старте узнаёт параметры скрина, и увеличивает свой диалог
          по вертикали до, например, 75% вертикального размера экрана. По горизонтали - пропорционально.
          итд итп.
          ---
          Скорее всего, самой большой проблемой будет реализация именно на С.
          На С++ вероятность успеха резко повышается.
          Кроме того, у реализации С имеются самые широкие возможности по утечке ресурсов.
          Сообщение отредактировано: ЫукпШ -
            Цитата H g @
            Но поищу еще способы.

            На счет размера контролов - ничего не скажу. А вот на счет графики у меня есть мысль, особенное если ты не пользуешь "тяжелые" C++ фрэймворки, а хочешь попрогать на чистых сях. Обрати внимание на Си-либу по работе с векторной графикой Cairo. Она, кстати, умеет работать с SVG форматом. Так что с качественным масштабированием графики (векторной) - у тебя проблем не будет. Один минус в моём совете - я это не пользовал, а так, слышал краем уха. Но чуйка подсказывает, что тут есть интересное и полезное! :rolleyes:
              Цитата ЫукпШ @
              Значит, надо изготовить такие контролы ,
              включая панель на которой они расположены, которые пропорционально меняют размеры,
              шрифты, иконки, рисунки, и расположение дочерних контролов (у кого имеются).
              Если всё получится удачно, смастерим из них библиотеку.

              У меня CAD система, на главной форме пользователь рисует кинематическую схему, а потом кликая на элементах появляются диалоговые окна неизменяемых размеров. ... Да, конечно, можно сделать большие и маленькие по размерам диалоговые окна при запуске программы определить (или даже в настройках дать возможность пользователю выбрать) и показывать "большой" или "маленький" диалог. Скорее всего так и сделаю.

              Цитата Majestio @
              Обрати внимание на Си-либу по работе с векторной графикой Cairo

              Графика у меня можно сказать сделана двумя функциями
              ExpandedWrap disabled
                MoveToEx(hdc,  x2,  y2, NULL); LineTo(hdc,  x1,  y1);

              а остальная магия это математика. Графика и так векторная, что-то с ней делать, кроме как работать в главном окне - нет необходимости. Есть еще окно, где 3D вид всей кинематической схемы, но там все сделано на OpenGL и это окно меня очень порадовало, потому что работает идеально, не смотря на все козни создателей новых windows и производителей ноутбуков.
              OFFTOP
              Скрытый текст
              Параллельно у меня 4 проекта, 1 CAD система и 3 игры. В 3-х мерной игрушке сначало думал делать значки/иконки/рисунки и т.д. в Photoshop и потом в качестве текстур вставлять, но видя как отлично отработала OpenGL я сделаю все элементы интерфейса в том числе и рисунки на OpenGL.

              За советы спасибо
              Сообщение отредактировано: H g -
                H g
                оффтоп
                Цитата H g @
                OpenGL

                OpenGL уже устарел и не поддерживается как API. Может, ты имел ввиду Vulkan?
                Кстати, было бы интересно узнать, что за игры. Если заглянешь в наш форумский чат в ТГ (ссылка в моей подписи) или в раздел проектов на форуме Разработка и тестирование программ
                  Цитата B.V. @
                  Может, ты имел ввиду Vulkan?

                  B.V., респектище за тему!
                  Я тут положу это для будущих размышлений :whistle:
                    OFFTOP
                    Скрытый текст

                    Цитата B.V. @
                    Кстати, было бы интересно узнать, что за игры. Если заглянешь в наш форумский чат в ТГ (ссылка в моей подписи) или в раздел проектов на форуме Разработка и тестирование программ

                    Создал тему в разделе Разработка и тестирование программ, "Пошаговая стратегия" она 3D на OpenGL, еще есть две игры но они не представляют интерес для публики, это : "три в ряд" и "2D платформер".
                    ТГ каналами не пользуюсь.
                    Сообщение отредактировано: H g -
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0469 ]   [ 17 queries used ]   [ Generated: 3.09.25, 01:32 GMT ]