Wie erkennen aktuelle Bildschirmauflösung?
Wie kann ich von Winapi (in C oder C++) ermitteln der aktuellen Bildschirmauflösung?
Etwas hintergrund:
Ich will eine neue OpenGL-Vollbild-Fenster, aber will es öffnen, mit der gleichen horizontalen und vertikalen Größe der desktop bereits festgelegt ist. (Wenn jetzt jeder verwendet LCD-Bildschirme, ich dachte, dies ist der beste Weg, um die native Auflösung des Bildschirms).
Ich nicht dringend brauche, um das wissen auch die desktop-Farbtiefe, obwohl, wäre ein netter bonus.
Bitte stellen Sie sicher, dass Ihr code können sich mit mehreren Monitoren in einigen sinnvollen Art und Weise.
silico, was ist eine sinnvolle Art und Weise? Starten Sie das Spiel (es ist ein kleines Spiel auf dem primären monitor nur???
Clark Kant: Standardmäßig auf dem primären monitor, sondern dem Benutzer zu ermöglichen, setzen Sie einen bestimmten monitor in Ihrem in-game-setup-Bildschirm. Vielleicht auch unterstützen mygame.exe /Monitor1 etc. Und wenn Sie auch support-Fenster-Modus, verwenden Sie MonitorFromWindow zu wissen, wo die Daten wiederherstellen, wenn Sie wechseln Sie zurück in den Vollbildmodus.
Clark Kant: Anders ziemlich viel trifft es auf den Kopf, was ist "sinnvoll" für Ihre kleinen Spiel. Als ich sagte "vernünftig", was ich eigentlich meinte war "Verhalten entsprechende Anwendung." Im Fall von computer-Spiele, sollte ich in der Lage, konfigurieren Sie die monitor Einstellungen richtig, selbst im multi-monitor-Umgebungen.
silico. Aber was willst du genau? Es wird ein kleines 2D arcade-Stil-Spiel. Wenn Sie mir sagen, was Sie erwarten von solch eine app, ich kann Ihnen die erste Version, wenn es fertig ist. 🙂
silico, was ist eine sinnvolle Art und Weise? Starten Sie das Spiel (es ist ein kleines Spiel auf dem primären monitor nur???
Clark Kant: Standardmäßig auf dem primären monitor, sondern dem Benutzer zu ermöglichen, setzen Sie einen bestimmten monitor in Ihrem in-game-setup-Bildschirm. Vielleicht auch unterstützen mygame.exe /Monitor1 etc. Und wenn Sie auch support-Fenster-Modus, verwenden Sie MonitorFromWindow zu wissen, wo die Daten wiederherstellen, wenn Sie wechseln Sie zurück in den Vollbildmodus.
Clark Kant: Anders ziemlich viel trifft es auf den Kopf, was ist "sinnvoll" für Ihre kleinen Spiel. Als ich sagte "vernünftig", was ich eigentlich meinte war "Verhalten entsprechende Anwendung." Im Fall von computer-Spiele, sollte ich in der Lage, konfigurieren Sie die monitor Einstellungen richtig, selbst im multi-monitor-Umgebungen.
silico. Aber was willst du genau? Es wird ein kleines 2D arcade-Stil-Spiel. Wenn Sie mir sagen, was Sie erwarten von solch eine app, ich kann Ihnen die erste Version, wenn es fertig ist. 🙂
InformationsquelleAutor Prof. Falken | 2011-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten:
Es ist wichtig, daran zu erinnern, dass ein monitor nicht immer "Start" auf 0 x 0 festlegen, so dass nur zu wissen, die Größe ist nicht genug, um die position Ihrer Fenster. Sie können MonitorFromWindow zu finden, die überwachen Sie Ihr Fenster auf und rufen Sie dann GetMonitorInfo
Wenn Sie gehen wollen, dass die low-level-route oder ändern Sie die Auflösung, die Sie verwenden müssen, EnumDisplayDevices, EnumDisplaySettings und ChangeDisplaySettings (Dies ist der einzige Weg, um die refresh-rate ist, soweit ich weiß, aber GetDeviceCaps wird Ihnen sagen, die Farbe der Tiefe)
Ich bin nicht sicher, wie Sie all dies gilt bei der Verwendung von OpenGL im Vollbild Modus? Dinge wie "begin" auf 0 x 0 festlegen, bedeutet dies noch gelten?
Wahrscheinlich nicht, ich Rede von windows, würde man hoffen, dass OpenGL abstracts, die entfernt und Sie sind in der Lage, nur sagen Sie es dem monitor auf und es wird sich um den rest kümmern
Fehler C2065: 'SM_CX' : nicht deklarierter Bezeichner
So positionieren Sie ein Fenster, das Sie verwenden sollten GetMonitorInfo. Sie können auch versuchen EnumDisplaySettings mit ENUM_CURRENT_SETTINGS wenn Sie sich für low-level-Informationen...
InformationsquelleAutor Anders
Wenn das system verwenden DPI-Virtualisierung (Vista und höher) mit GetSystemMetrics oder GetWindowRect wird scheitern, um die Reale Bildschirmauflösung (Sie bekommen virtuelle Auflösung), es sei denn, Sie erstellt DPI Aware Application.
Also die beste option hier (einfach-und rückwärts kompatibel) zu verwenden EnumDisplaySettings mit ENUM_CURRENT_SETTINGS.
InformationsquelleAutor fingeros
Es ist GetSystemMetrics mit diese Parameter:
SM_CXSCREEN < Breite
SM_CYSCREEN < Höhe
Als es sagt (SM_CXSCREEN):
SM_CXVIRTUALSCREEN
/SM_CYVIRTUALSCREEN
um Benutzer ganzen - Bildschirm.InformationsquelleAutor Poni
Ich denke SystemParametersInfo nützlich sein könnten.
Edit: Schau GetMonitorInfo zu.
portion of the screen not obscured by the system taskbar or by application desktop toolbars
🙂InformationsquelleAutor Mehrdad
MFC Beispiel Multiple-monitor-Unterstützung mit GetSystemMetrics EnumDisplayMonitors und GetMonitorInfo
Folgen Sie diesem link: Monitor-enumeration mit source-code
link aktualisiert
InformationsquelleAutor Ulterior
Gelöscht vor etwa einer Woche, dann bearbeitet 3-4-13.
Hier ist gut für Situationen, in denen der Benutzer entschieden hat, zu
führen Sie Ihren desktop in einer niedrigeren Auflösung (schlechte Idee) oder die Ecke
Fälle, in denen eine person, die beschlossen, ein monitor, der Ihre
Grafik-controller konnte nicht voll nutzen:
GetWindowRect(GetDesktopWindow)
ist völlig falsch. Es wird absichtlich nur die Rückkehr Rechteck des primären Monitors. "Das Rechteck des desktop-Fensters zurückgegeben GetWindowRect oder GetClientRect ist immer gleich dem Rechteck des primären Monitors, um die Kompatibilität mit vorhandenen Anwendungen."InformationsquelleAutor formerBGIuser
Ich verwenden Sie die GetSystemMetrics-Funktion
GetSystemMetrics(SM_CXSCREEN) gibt die Bildschirmbreite(in Pixel)
GetSystemMetrics(SM_CYSCREEN) - Höhe in Pixel
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx
GetSystemMetrics
gibt nur Infos über die primäre (erste) monitor, siehe msdn.microsoft.com/en-us/library/windows/desktop/...InformationsquelleAutor Petr