Exibindo corretamente em uma exibição de alto DPI
Embora Direct2D resolva muitos problemas de alto DPI para você, há duas etapas que você deve seguir para garantir que seu aplicativo funcione corretamente em telas de alto DPI.
Etapa 1: usar o próprio DPI da janela depois de criá-lo
A função GetDpiForWindow recupera o valor de pontos por polegada (dpi) de uma janela especificada. Para usar esse valor para definir a largura de uma janela, use a seguinte fórmula:
< DPI> * <largura, em pixels> / <DPI padrão>
... em que DPI é o valor derivado por GetDpiForWindow e o DPI padrão é 96 (definido como USER_DEFAULT_SCREEN_DPI
no winuser.h
cabeçalho). A fórmula é semelhante ao eixo vertical:
< DPI> * <altura, em pixels> / <DPI vertical padrão>
O exemplo de código na etapa 2.3 de Criar um aplicativo Direct2D simples recupera o DPI de uma janela e, em seguida, define seu tamanho como 640 × 480, dimensionado para o DPI.
Observação
Para um aplicativo de Plataforma Universal do Windows (UWP), você pode usar a propriedade DisplayInformation::LogicalDpi.
Etapa 2: declarar que o aplicativo tem reconhecimento de DPI
Quando um aplicativo se declara com reconhecimento de DPI, é uma instrução que especifica que o aplicativo se comporta bem nas configurações de DPI até 200 DPI. No Windows Vista e no Windows 7, quando a virtualização de DPI está habilitada, os aplicativos que não têm reconhecimento de DPI são dimensionados e os aplicativos recebem dados virtualizados das APIs do sistema, como a função GetSystemMetric . Para declarar que seu aplicativo tem reconhecimento de DPI, conclua as etapas a seguir.
Crie um arquivo chamado DeclareDPIAware.manifest.
Copie o xml a seguir no arquivo e salve-o:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application> </assembly>
No arquivo .vcproj do projeto, adicione a seguinte entrada dentro de cada elemento Configuration em VisualStudioProject/Configurations:
<Tool Name="VCManifestTool" AdditionalManifestFiles="DeclareDPIAware.manifest" />