2016-12-15 3 views
2

Я хочу, чтобы размер окна SDL оставался в пределах working area (SPI_GETWORKAREA) окон, которые исключают окна панели задач других панелей.Размер окна регулировки SDL

Проблема заключается в том, что и SDL_CreateWindow, и SDL_SetWindowSize устанавливают клиентскую область окна, а не размер, включая границы окна. Поэтому, когда я устанавливаю размер окна, чтобы поместиться на небольшой рабочей области, границы все равно выходят из рабочей зоны.

SDL_CreateWindow: Используйте эту функцию, чтобы установить размер клиентской области области окна.

Предоставляет ли SDL способ установить размер окна в рабочей зоне? или как мне получить размер границы окна SDL, чтобы я мог сделать это сам?

ответ

3

Единственный способ, которым я знаю (SDL 1.2), - это сначала создать небольшое окно (2x2 пикселя), а затем проверить общий размер окна с помощью Windows API (GetWindowPlacement). Исходя из этого, вы можете рассчитать параметры, необходимые для получения размера окна, который вы ищете, и, наконец, изменить размер окна (MoveWindow).

Я надеюсь, что у кого-то есть лучшее решение, потому что это очень уродливое обходное решение.

+0

Думаю, вам не нужно создавать окно размером 2x2. Если вы используете Windows API в любом случае, вы можете использовать 'GetWindowPlacement' для получения оконных коордов, а затем' ClientToScreen', чтобы получить координаты клиентской области на экране. Выполнение математики на этих двух языках даст размеры границ. – SMUsamaShah

+0

Если вы нашли решение, которое сразу создало окно с правильным размером, без предварительного просмотра какого-либо временного окна, отправьте свой код. –

+0

Чтобы использовать WinAPI, нам нужно сначала открыть окно. Я не мог найти способ сделать это с помощью SDL. – SMUsamaShah

2

Используйте SDL_GetWindowSize() для запроса размера клиентской области в координатах экрана и SDL_GL_GetDrawableSize() или SDL_GetRendererOutputSize() для запроса размера чертежа в пикселях.

Edit 1:

A Вы упомянули, что вы используете Windows, так что вы можете использовать GetWindowRect(), что дает прямоугольник, который включает в себя границу окна и GetClientRect() дает вам прямоугольник, который исключает границу - область, которая выделена для конкретного чертежа окна.

Примечание: Пожалуйста, обратите внимание, что GetWindowRect() возвращает прямоугольник в координатах экрана - координаты, которые по отношению к экрану/монитору. GetClientRect() возвращает прямоугольник, который относительно себя.

Пример: Поскольку вы используете WINAPI, вы можете увидеть рабочий пример from here.

2

Вам даже не нужен WinAPI для этого.

Размер границ окна может быть определен SDL_GetWindowBordersSize(), а часть дисплея, не занятая панелью задач, должна быть возвращена SDL_GetDisplayUsableBounds().

С этими функциями поддержание правильного положения окна (и, возможно, размера) должно быть простым.