Du bist nicht angemeldet.

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

1

20.01.2011, 20:40

Unterstütze Bildschirmaufl. per WinAPI ermitteln

Hi,
wie kann ich alle, vom jeweiligen Bildschirm, unterstürtzen Bildschirmauflösungen mit der WinAPI ermitteln?

2

20.01.2011, 20:49

Hi,

damit habe ich mich auch gerade beschäftigt. Schau dir mal die Funktionen EnumDisplayDevices und EnumDisplaySettings an.

Damit kannst du die Auflösungen auf den verschiedenen Devices ermitteln.

Gruß

drakon

Supermoderator

Beiträge: 6 522

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

20.01.2011, 21:19

Also wenn die aktuelle Auflösung haben willst geht das auch mit den SystemMetrics. Mit den indices SM_CXSCREEN und SM_CySCREEN kriegst du die Auflösung.
Aber wenn du am dem interessiert bist was der Adapter kann geht der Weg über das, was Maddin erwähnt.

BlueCobold

Community-Fossil

Beiträge: 10 870

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

21.01.2011, 12:32

Wäre eventuell erwähnenswert, dass nicht jede Auflösung unbedingt auch für dich interessant sein muss, da viele Display-Modi nur Software-Modi sind oder keine Features bieten, die du benötigen würdest (Bit-Tiefe, Double-Buffering, 3D-Hardware-Beschleunigung, Stencil-Buffering, etc, etc)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 140

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

21.01.2011, 12:45

Wenn es unbedingt unter Windows sein soll, dann verstehe ich nicht, warum du das nicht mit Direct3D machst? Damit kannst du alle Modi herausfinden, meines Wissens auch nach alle Hardwarebeschleunigt. Für Linux/Mac brauchst du eh eine andere Lösung....

Fireball

Alter Hase

Beiträge: 421

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

6

21.01.2011, 15:17

Alle Aflösungen aller Bildschirme - mit DirectX

Hallo,

also als erstes benötigst du den Grafik Adapter, den du über ein IDXGIFactory Objekt abfragen kannst.

Der IDXGIAdapter liefert dir ein IDXGIOutput Objekt, welche deine an die Grafikkarte angeschlossenen Bildschirme repräsentieren.

Die gewünschten Infos erhälst du dann über IDXGIOutput.GetDisplayModelList.

Ich kann dir nur raten mal in der msdn nachzusehen, dort ist der Einsatz dieser Interfaces genau beschrieben.


Mfg

FB

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

7

21.01.2011, 15:23

@Maddin: Danke, genau das was ich gesucht habe :)
@BlueCobold: Jo mag sein, aber ich will einfach nur ne Liste aller vom Bildschirm unterstützere Bildschirmauflösungen. Ob dann manche nicht in 3D Beschleunigung ist, muss dann halt der User wählen. Hauptsache, der User bekommt die passenden Auflösungen aufgelistet. Wär doof, wenn jemand mit einem 16:9er Bildschirm nur Auflösungen wie 1024x768 (4:3) etc. bekommt. Und ich hab keine Lust, alle erdenkbaren Auflösungen zusammen zu suchen und auf zu listen ;)
@TrommlBomml & Fireball: Das wär sicher auch ne elegante Lösung. Allerdings will ich das auch anbieten, wenn OpenGL verwendet wird. Und zusätzlich mache ich das in PureBasic, weil die Auflösung für meine TechDemo in einem kleinen extra Programm "Launcher" zu sehen sein soll.
Da will ich nicht groß DirectX Devices erzeugen sondern einfach nur unter Windows die besagten Modi auflisten ;)
@all: Danke für eure Hilfe
mfg Lukas

Sylence

Community-Fossil

Beiträge: 1 679

Beruf: Softwareentwickler

  • Private Nachricht senden

8

21.01.2011, 17:52

Dafür musst du kein extra device erzeugen... wär ja auch ein bisschen doof erst ein devie erzeugen zu müssen, bevor man weiß mit welchen einstellungen das überhaupt erzeugt werden kann ;)
Software documentation is like sex. If it's good you want more, if it's bad it's better than nothing.

BlueCobold

Community-Fossil

Beiträge: 10 870

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

21.01.2011, 20:33

@BlueCobold: Jo mag sein, aber ich will einfach nur ne Liste aller vom Bildschirm unterstützere Bildschirmauflösungen. Ob dann manche nicht in 3D Beschleunigung ist, muss dann halt der User wählen. Hauptsache, der User bekommt die passenden Auflösungen aufgelistet.

Das sehe ich anders. Es nützt dem User gar nichts, wenn er 3mal die gleiche Auflösung aufgelistet bekommt und zwei davon dazu führen, dass das Programm abstürzt oder nicht mehr korrekt gerendert wird. Solche Modi sollten rausgefiltert werden, denn sie wirken auf einen User eher wie ein Programm-Fehler und es macht keinen Sinn sie aufzulisten.
Ein Filtering ist da ja auch überhaupt kein Problem, du kannst die gebotenen Features des Display-Modes schließlich selber abfragen, bzw. schauen, was der Modus unterstützt und was nicht. Und das völlig automatisch. So mache ich das z.B. auch, ich durchsuche alle Display-Modi nach dem, was ich brauche, denn obwohl Windows dafür eine Funktion bietet, hat diese mir aus 2 Modi mit beiden Features immer den rausgesucht, den ich nicht wollte und das konnte ich auch nicht durch Flags beim Aufruf ändern - folglich suche und filtere ich selber.

Die Auflösung 1024x768 kann übrigens trotzdem ebenfalls auf einem 16:9 Monitor aufgelistet werden. Warum auch nicht? Ich fänd's ganz schön grauenhaft, wenn der Modus irgendwo nicht existent sein sollte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (21.01.2011, 20:40)


BLU3 L30PARD

Treue Seele

Beiträge: 340

Wohnort: Hoch oben im Norden Schleswig Holsteins

Beruf: Schüler

  • Private Nachricht senden

10

22.01.2011, 11:04

Einfach

C-/C++-Quelltext

1
2
int screen_x = GetSystemMetrics(SM_CXSCREEN); // Width in px
int screen_y = GetSystemMetrics(SM_CYSCREEN); // Height in px

Ich denke, dann lässt sich abschätzen, was für auflösungen der Bildschirm
noch beherrscht ;)

Ist z.B. screen_x == 1920 && screen_y == 1080, dann weißt du schonmal, dass
es ein 16:9 Display ist ;)

Werbeanzeige