2017-01-19 11 views
3

Я использую SDL_SetWindowPosition, чтобы разместить мое окно. Могу ли я использовать эту функцию для размещения моего окна на другом мониторе?SDL2 Как разместить окно на втором мониторе?

UPDATE

Использование SDL_GetDisplayBounds не будет возвращать правильные позиции монитора, когда размер текста изменяется в ОС Windows 10. Любые идеи, как это исправить?

enter image description here

ответ

0

Да, вы можете использовать SetWindowPosition, если вы знаете границы второго монитора. Вы можете использовать функцию SDL_GetDisplayBounds (int displayIndex, SDL_Rect * rect), чтобы получить их.

3

SDL2 использует глобальную систему координат экрана. Каждое устройство отображения имеет свои границы внутри этого координатного пространства. Следующий пример помещает окно на втором устройстве отображения:

// 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...); 

Глядя на определение SDL_WINDOWPOS_CENTERED в SDL_video.h мы видим, она определяется как

#define SDL_WINDOWPOS_CENTERED   SDL_WINDOWPOS_CENTERED_DISPLAY(0) 

, чтобы мы могли также использовать макрос SDL_WINDOWPOS_CENTERED_DISPLAY(n) где n это индекс отображения.

Обновление для Windows 10 - DPI масштабирование проблема

Похоже, что это действительно ошибка с SDL2 и изменения масштаба DPI в Windows (т.е. текст масштаба).

Вот два отчета об ошибках, относящихся к проблеме. Они оба по-прежнему остаются нерешенными.

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

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

Потенциальное решение

Я уверен, что ОП может использовать API WIN32, чтобы определить масштаб точек на дюйм, для scale != 100%, а затем скорректировать границы от этого.

+0

Я хотел бы прокомментировать исходный вопрос, чтобы ответить на ваш вопрос, но у меня пока нет этой привилегии. Моя догадка меняет ** текстовую шкалу ** в Windows 10 влияет на координату экрана с SDL каким-то образом. У меня была другая, но связанная с этим проблема, пока я не понял, как использовать SDL2 с дисплеем Retina для Mac. (Retina использует масштабирование). Я предлагаю вам попробовать следующий эксперимент: вывести границы экрана и проверить, изменяются ли они при изменении настройки шкалы текста под Windows 10. –

+0

Возможно, это может быть ошибка с SDL2. Вы искали других, имеющих тот же опыт, в Windows 10? –

+0

Если мое предположение верно, все позиции экрана будут умножены на 1,25 в результате 125% текстовой шкалы. –

 Смежные вопросы

  • Нет связанных вопросов^_^