Primeiro, lembre-se de que, com a rasterização, tecnicamente não existe uma verdadeira independência de resolução. Com uma ampliação suficientemente alta, texels individuais começarão a se tornar visíveis. A única solução para isso é escrever um sistema de gráficos vetoriais.
Dito isto, existem algumas etapas para criar um sistema independente de resolução baseado em varredura robusto: dimensionamento, sistemas de coordenadas e layout.
Para dimensionamento e posicionamento, precisamos usar algum conjunto de unidades que mantenha uma proporção com a resolução real do aplicativo. Nesse caso, vamos usar polegadas porque sou americano e você pode dimensionar elementos com DPI (pontos por polegada). Por exemplo, digamos que seu aplicativo esteja sendo executado em 800x600. O DPI padrão do Windows é 96, o que significa que o aplicativo possui uma resolução de (800/96) x (600/96) polegadas ou 8,33x6,25 polegadas.
Como você precisa trabalhar com, pelo menos, as proporções 4: 3 e 16: 9, como você lida com o sistema de coordenadas da tela fica um pouco complicado. O que eu recomendo fazer é colocar (0,0) no centro da área de exibição (além de janelas e controles). Isso funciona bem porque se você colocar (0,0) em um canto, à medida que ele se move com base na resolução e na proporção, ele traduzirá todos os seus sprites, enquanto o centro da tela sempre será o centro da tela. importa o dispositivo. Continuando o nosso exemplo com 800x600, isso resultaria em um sistema de coordenadas que é (da esquerda para a direita) -4.165in a 4.165in e (de cima para baixo) 3.125in a -3.125in.
Portanto, no momento, você possui um sistema de interface do usuário independente de DPI com itens que sempre estarão no mesmo local em relação ao centro da tela - não totalmente independentes da resolução. Felizmente, o que a independência de DPI permite fazer é dimensionar a interface do usuário, dimensionando o DPI com base em algumas heurísticas. Por exemplo, podemos dimensionar o DPI usando a resolução vertical como nossa heurística. Se 800x600 tiver 96 DPI, usaremos 123 DPI para 1024x768 ou 115 DPI para 1280x720.
Por fim, você precisará criar um sistema de layout que lide tanto com o posicionamento absoluto quanto com o relativo. Excelentes exemplos disso são o WPF e a web. Você pode especificar que os controles / caixas preencham alguma% do elemento pai enquanto o encaixa em uma aresta, juntamente com muitas outras opções úteis de layout automático. Tudo isso resultará em um sistema de interface do usuário capaz de parecer quase idêntico em várias resoluções e proporções diferentes.
Para resumir, recomendo que você estude o WPF, pois faz quase tudo isso, exceto que mantém uma origem no sistema de coordenadas do canto superior esquerdo e não escala automaticamente o DPI com base na resolução vertical.