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.
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. –
Es könnte möglicherweise ein Fehler mit SDL2 sein. Haben Sie auf Windows 10 nach anderen mit derselben Erfahrung gesucht? –
Wenn meine Annahme richtig ist, werden alle Bildschirmpositionen mit 125% Textmaßstab multipliziert. –