2017-10-05 3 views
0

J'écris un programme Windows qui permet à l'utilisateur de changer la résolution entre 1920 * 1080 et 3840 * 2160, c'est-à-dire entre FHD et 4K.Comment obtenir l'échelle de l'écran dans Windows?

J'ai essayé d'utiliser "GetSystemMetrics" pour obtenir la résolution actuelle.

//Algorithm #1 
//Get current resolution and resolution scaling. 
xScreenResolution = GetSystemMetrics(SM_CXSCREEN); 
yScreenResolution = GetSystemMetrics(SM_CYSCREEN); 
cout << "Current Resolution is: " << xScreenResolution << "x" << yScreenResolution << endl; 

Par exemple, si j'utilise une résolution de 3840 * 2160, je me attendais le programme me donnera la résolution de 3840 * 2160. Cependant, le programme affiche seulement 1536x864, ce qui correspond à la résolution après que Windows ait effectué un rééchelonnement.

Je veux savoir comment obtenir le facteur d'échelle (100%, 200%, 250%, etc.) par programmation comme les paramètres d'affichage dans Windows 10. display settings in Windows 10

Répondre

1

Il semble que votre application reçoit virtualisé DPI Les données. Pour recevoir des métriques correctes, vous devez fournir un manifeste d'application approprié, y compris une prise en charge PPP élevée et des entrées de compatibilité système. Voir High DPI.

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <application xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <windowsSettings> 
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware> 
     </windowsSettings> 
    </application> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
     <application> 
      <!-- Windows 10 --> 
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> 
     </application> 
    </compatibility> 
</assembly> 

Pour obtenir mise à l'échelle, vous pouvez appeler GetDpiForMonitor.

+0

Merci de me répondre, mais je ne suis pas sûr de savoir comment utiliser GetDpiForMonitor, comme je ne sais pas comment déclarer et initialiser Hmonitor et MONITOR_DPI_TYPE correctement –

+1

@LuftSchlafer: Voir [EnumDisplayMonitors] (https://msdn.microsoft .com/fr-fr/library/dd162610.aspx). – IInspectable