[WinAPI] DPI abfragen

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

[WinAPI] DPI abfragen

Beitrag von Krishty »

Hi,

Mal wieder was Exotisches :) Ich möchte die physische Größe eines Fensters auf dem Bildschirm bestimmen. Das geht über die Größe des Fenstes (in Pixeln) und die DPI. Erstere ist ein Kinderspiel (WM_SIZE oder GetClientRect()), zweitere erhalte ich durch GetDeviceCaps().

Nun wird es aber komplexer. Bevor ich blind losprogrammiere, würde ich gern zwei Dinge wissen:

1. Device-Contexts (die man für besagtes GetDeviceCaps() braucht) erscheinen mir ein bisschen betagt und ich habe gelesen, dass die Arbeit mit ihnen ordentlich Ressourcen verbraucht. Gibt es in der WPF/DXGI-Ära aktuellere Pendants? Der Artikel über DPI-Awareness gibt nichts her, weil er von Text-only-Anwendungen ausgeht, die ja automatisch vom DWM angepasst werden.

2. Das Fenster wird mit D3D befüllt werden und man wird es entsprechend auch in den Vollbildmodus schalten können. Kann ich mich darauf verlassen, dass dabei auch die DPI aktualisiert werden, falls die Fullscreen-Auflösung nicht der Desktop-Auflösung entspricht?

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: [WinAPI] DPI abfragen

Beitrag von Jörg »

Die Groesse des Monitors (in mm oder inch) aendert sich doch nicht. Die kannst Du abfragen oder ausrechnen und den Rest bei Aufloesungswechsel selber skalieren.
Frag mich aber nicht wie und ob man vom Programm aus ermitteln kann, ob z.B. auf einem LCD Zoom/Strech oder 1:1 Mapping eingestellt ist ;)

Die Device-Kontexte kannste ja wieder freigeben, wenn du sie nicht mehr brauchst. Das sollte resourcenmaessig schon gehen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [WinAPI] DPI abfragen

Beitrag von Krishty »

Jörg hat geschrieben:Die Groesse des Monitors (in mm oder inch) aendert sich doch nicht.
ARGH natürlich :) Das war ein ziemlicher Denkfehler meinerseits und schlägt beide Fliegen mit einer Klappe – wenn ich die DPI nur einmalig abfragen muss, muss ich mir natürlich auch keine Gedanken mehr über das DC machen.

Jetzt muss ich nurnoch an den Window-Associations pfriemeln um den Window-Manager wissen zu lassen, wann das Fenster im Fullscreen-State ist, ohne den Renderer damit zu belästigen. Mal gucken.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten