По-перше, майте на увазі, що при растерізації технічно немає такого поняття, як справжня незалежність. При досить високому збільшенні окремі текселі почнуть видно. Єдине рішення для цього - написати систему векторної графіки.
Однак, є кілька кроків до створення надійної незалежної від растрової системи розв'язання: розмір, системи координат та компонування.
Для розміщення та розміщення нам потрібно використовувати деякий набір одиниць, які підтримують відношення до фактичної роздільної здатності програми. У цьому випадку давайте використовувати дюйми, тому що я американський, і ви можете масштабувати елементи за допомогою DPI (крапки на дюйм). Наприклад, скажімо, що ваша програма працює в 800x600. За замовчуванням Windows DPI становить 96, так що програма має роздільну здатність (800/96) x (600/96) дюймів або 8,33x6,25 дюйма.
Оскільки вам потрібно вміти працювати, принаймні, із співвідношенням сторін 4: 3 та 16: 9, як ви керуєте своєю системою координат екрану, стає дещо складним. Те, що я рекомендую робити, - це поставити (0,0) в центр області дисплея (а також вікна та елементи керування). Це добре працює, тому що якщо ви помістите (0,0) у кут, тоді, коли цей кут рухатиметься навколо, залежно від роздільної здатності та співвідношення сторін, він перекладе всі ваші спрайти, тоді як центр екрану завжди буде центром екрана. Незалежно від пристрою. Продовжуючи наш приклад з 800x600, це призведе до системи координат, яка (зліва направо) від 4,165 дюйма до 4,165 дюйма і (зверху вниз) від 3,125 дюйма до -3,125 дюйма.
Отже, на даний момент у вас є DPI-незалежна система інтерфейсу з елементами, які завжди будуть знаходитись на одному місці відносно центру екрана - не зовсім роздільна здатність. На щастя, незалежність DPI дозволяє вам масштабувати інтерфейс користувача шляхом масштабування DPI на основі евристики. Наприклад, ми можемо масштабувати DPI, використовуючи вертикальну роздільну здатність як нашу евристичну. Якщо 800x600 становить 96 DPI, тоді ми будемо використовувати 123 DPI для 1024x768 або 115 DPI для 1280x720.
Нарешті, вам знадобиться побудувати систему компонування, яка обробляє як абсолютне позиціонування, так і відносне позиціонування. Прекрасними прикладами цього є WPF та Інтернет. Ви можете вказати, що елементи керування / поля заповнюють деякий% батьківського елемента, докидаючи його до краю разом із багатьма іншими корисними параметрами автоматичного компонування. Все це разом призведе до того, що система інтерфейсу може виглядати майже однаково у багатьох різних дозволах та співвідношеннях сторін.
Підводячи підсумок, я настійно рекомендую вивчити WPF, оскільки він робить майже все це, за винятком того, що він бере початок у верхній лівий кут системи координат і не автоматично масштабує DPI на основі вертикальної роздільної здатності.