Wie kann ich erkennen, ob der Benutzer die Schrift (DPI) eingestellt ist zu klein, groß, oder etwas anderes?
Ich brauche, um herauszufinden, wenn dem Bildschirm des Benutzers auf " normal 96 dpi (kleine Größe), groß 120 dpi Schriftarten, oder etwas anderes. Wie mache ich das in VB.NET (bevorzugt) oder C#?
- Eine native Art (geschrieben in Delphi, sondern nur mit der nativen Windows-API):
var dc: HDC; res: integer; begin dc := GetDC(0); if dc <> 0 then try res := GetDeviceCaps(dc, LOGPIXELSX); finally ReleaseDC(0, dc) end;
- Wie Andreas schon sagt, kann man sich auch an den Windows-API-Funktionen
GetDC
undGetDeviceCaps
um diese Informationen zu erhalten, aber Sie müssen sich mit P/Invoke, um auf Sie aus .NET-Anwendung, und es gibt wenig nutzen dabei, da dieGraphics
Klasse ist bereits eingewickelt so schön in verwaltetem code. - Aber egal, danke, die Zahlung Ihrer Steuern!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den besten Weg ist, nur um lassen Sie die form, die Größe sich automatisch, basierend auf der aktuellen DPI-Einstellungen. Machen Sie das tun, setzen Sie einfach die
AutoScaleMode
Eigenschaft zuAutoScaleMode.Dpi
und aktivieren Sie dieAutoSize
Eigenschaft. Sie können dies tun, entweder über das Eigenschaften-Fenster im designer-oder obwohl-code:Oder, wenn Sie brauchen, zu wissen, diese Informationen während Zeichnung (wie in der
Farbe
event-handler-Methode), können Sie extrahieren Sie die Informationen aus derDpiX
undDpiY
Eigenschaften derGrafiken
Klasse Instanz.Schließlich, wenn Sie brauchen, um zu bestimmen, die DPI-Stufe auf-the-fly, haben Sie, um eine temporäre Instanz der
Graphics
Klasse für Ihre form, und überprüfen Sie dieDpiX
undDpiY
Eigenschaften, wie oben gezeigt. DieCreateGraphics
Methode von der form-Klasse macht dies sehr einfach zu tun; nur sicher, dass Sie wickeln die Erstellung dieses Objekts in einemMit
- Anweisung um Speicherverluste zu vermeiden. Beispiel-code:Haben Sie einen Blick auf die DpiX und DpiY Eigenschaften. Zum Beispiel:
In VB: