windows - Om DPI problem

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en WIN32 SW, som brugergrænsefladen blev designet i 96 DPI, så når brugeren ændrer Windows DPI fra 96 ​​til 120 eller større, vil brugergrænsefladen være forkert. Jeg vil gerne vide, om der er API for at tvinge min SW til at vise brugergrænsefladen med 96DPI.

Bedste reference


Fra og med Windows Vista skal skalering for DPI ske automatisk. Jeg har ingen direkte erfaring med at vide, hvor godt det virker, men her er siden der forklarer, hvordan man slukker den:


http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx[8][9]

Andre referencer 1


Du kan også tilføje en appcompat-nøgle til din ansøgning. Stedet for dette i registreringsdatabasen er:


HKEY\_CURRENT\_USERSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers


Det er indstillingerne pr. Bruger, der er den samme nøgle i HKEY\_LOCAL\_MACHINE, men det er selvfølgelig en systemindstilling og kræver forhøjede privilegier at skrive til. Tilføjelse af en nøgle som sådan:


"C:path oapp.exe"="HIGHDPIAWARE"


Vil aktivere kompatibilitetsflagget til dit program, hvilket vil slukke for DPI-skalering. Dette gælder for Vista +.


SetProcessDPIAware er også en mulighed, men vær opmærksom på, at der er fare for en løbskondition, ifølge dokumentationen. [10]

Andre referencer 2


Der er ingen API til at tvinge din app til at vise på 96DPI. DPI er en enhedsindstilling og kan ikke styres pr. Applikation.


Hvis du kan ændre dit program, kan du skala din brugerflade til at se korrekt ud på høj DPI selv. Du skal ringe GetDeviceCaps; mere specificaly, du skal beregne X- og Y-skalaen ved hjælp af nummeret returneret til LOGPIXELSX og LOGPIXELSY. Noget sådan: [11]


HDC hdc;
double m\_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX) / 96.0;
double m\_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;