2017-01-19 5 views
3

Ich verwende SDL_SetWindowPosition, um mein Fenster zu positionieren. Kann ich mit dieser Funktion mein Fenster auf einem anderen Monitor positionieren?SDL2 Wie positioniere ich ein Fenster auf einem zweiten Monitor?

UPDATE

SDL_GetDisplayBounds Verwendung wird nicht die richtigen Monitorposition zurück, wenn die Textgröße in Windows 10. Alle Ideen geändert wird, wie dies zu beheben?

enter image description here

Antwort

0

Ja, können Sie SetWindowPosition verwenden, wenn Sie die Grenzen des zweiten Monitors kennen. Sie können die Funktion SDL_GetDisplayBounds (int displayIndex, SDL_Rect * rect) verwenden, um sie zu erhalten.

3

SDL2 verwendet ein globales Bildschirmkoordinatensystem. Jedes Anzeigegerät hat seine eigenen Grenzen innerhalb dieses Koordinatenraums. Im folgenden Beispiel wird ein Fenster auf einem zweiten Anzeigegerät:

// enumerate displays 
int displays = SDL_GetNumVideoDisplays(); 
assert(displays > 1); // assume we have secondary monitor 

// get display bounds for all displays 
vector<SDL_Rect> displayBounds; 
for(int i = 0; i < displays; i++) { 
    displayBounds.push_back(SDL_Rect()); 
    SDL_GetDisplayBounds(i, &displayBounds.back()); 
} 

// window of dimensions 500 * 500 offset 100 pixels on secondary monitor 
int x = displayBounds[ 1 ].x + 100; 
int y = displayBounds[ 1 ].y + 100; 
int w = 500; 
int h = 500; 

// so now x and y are on secondary display 
SDL_Window * window = SDL_CreateWindow("title", x, y, w, h, FLAGS...); 

bei der Definition von SDL_WINDOWPOS_CENTERED Blick in SDL_video.h wir sehen, es ist definiert als

#define SDL_WINDOWPOS_CENTERED   SDL_WINDOWPOS_CENTERED_DISPLAY(0) 

so konnten wir das Makro SDL_WINDOWPOS_CENTERED_DISPLAY(n) wo n verwenden auch ist der Anzeigeindex.

Update für Windows 10 - DPI-Skalierung Ausgabe

Es scheint, wie es in der Tat ein Problem mit SDL2 ist und das Ändern der DPI-Skala in Windows (das heißt Text Skala).

Hier sind zwei Fehlerberichte relevant für das Problem. Sie sind beide anscheinend immer noch ungelöst.

https://bugzilla.libsdl.org/show_bug.cgi?id=3433

https://bugzilla.libsdl.org/show_bug.cgi?id=2713

mögliche Lösung

Ich bin sicher, dass die OP der Win32-API verwenden, könnte die dpi Maßstab für scale != 100% und dann korrigieren Sie die Grenzen durch, dass zu bestimmen.

+0

Ich möchte die ursprüngliche Frage kommentieren, um Ihre Frage zu beantworten, aber ich habe noch nicht das Privileg. Meine Vermutung ist die Änderung der ** Textmaßstab ** in Windows 10 beeinflusst die Bildschirmkoordinaten mit SDL in irgendeiner Weise. Ich hatte ein anderes, aber verwandtes Problem, bis ich herausfand, wie man SDL2 mit dem Retina-Display meines Mac benutzt. (Retina verwendet Skalierung). Ich schlage vor, Sie versuchen, das folgende Experiment: Geben Sie die Anzeige Grenzen, und überprüfen Sie, ob sie sich ändern, wenn Sie die Einstellung Textgröße unter Windows 10 ändern. –

+0

Es könnte möglicherweise ein Fehler mit SDL2 sein. Haben Sie auf Windows 10 nach anderen mit derselben Erfahrung gesucht? –

+0

Wenn meine Annahme richtig ist, werden alle Bildschirmpositionen mit 125% Textmaßstab multipliziert. –

Verwandte Themen