| 

.NET C# Java Javascript Exception

2
Im Moment versuche ich meine Benutzersteuerelemente selbst und bezogen auf den aktuellen Skalierungsfaktor in den Größen manuell anzupassen, um Fehler in den Anzeigen bei einer Skalierung auf 125 oder auch 150% anzupassen. Dazu muss ich den DPI-Skalierungsfaktor berechnen, angeblich über ein Graphics-Objekt (also das einer Form oder eines Steuerelementes). Ich möchte die DPI-Abfrage aber nicht an einen bestimmten und per e-Parameter übergebenen Graphics-Bereich (das geht scheinbar nur im Paint-Ereignis über die Eigenschaften DpiX und DpiY), sondern über eine universelle Bibliotheksroutine (z.B. mit dem Namen GetDPI()) abfragen, die allgemeingültig ist und keine Objektübergabe erfordert. Wie kann ich das umsetzen? Oder muss ich die Abfrage in diesem Fall über eine API-Funktion vornehmen (will ich aber eigentlich nicht)?
News:
09.10.2013
Klaus L. 353 2 6
1 Antwort
2
how to get the system dpi settings in c# console application


Solution 1 (Graphics Generic)

using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
{
float dpiX = graphics.DpiX;
float dpiY = graphics.DpiY;
}

oder

using (Graphics g = Graphics.FromHwnd(Process.GetCurrentProcess().MainWindowHandle))
{
float dpiX = g.DpiX;
float dpiY = g.DpiY;
}


Solution 2 (API)

using System;
using System.Runtime.InteropServices;

namespace DPI
{
class Program
{
[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);

/// <summary>
/// Logical pixels inch in X
/// </summary>
const int LOGPIXELSX = 88;
/// <summary>
/// Logical pixels inch in Y
/// </summary>
const int LOGPIXELSY = 90;

static void Main(string[] args)
{
IntPtr hdc = GetDC(IntPtr.Zero);

Console.WriteLine(GetDeviceCaps(hdc, LOGPIXELSX));
// or
Console.WriteLine(GetDeviceCaps(hdc, LOGPIXELSY));
Console.ReadKey();
}
}
}


Interessant ist in diesem Zusammenhang auch folgender Link:

c# - Creating a DPI-Aware Application - Stack Overflow
09.10.2013
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Das schaiue ich mir mal an, danke. Der letzte Link führt allerdings nicht zu Stack Overflow, sondern zur Homepage von Codekicker!?
Klaus L. 10.10.2013
1
Link korrigiert, scheint ein Fehler im URL-Parser-Modul des BB-Code-Parsers zu sein.
Floyd 10.10.2013
Vielen Dank :-)
Klaus L. 11.10.2013

Stelle deine .net-Frage jetzt!