Я делаю С++-игру, и я хочу, чтобы она автоматически получала разрешение рабочего стола пользователя.
Я нашел решения только для окон до сих пор - есть способ/библиотека, чтобы найти разрешение на Windows/Mac/Linux?
Я делаю С++-игру, и я хочу, чтобы она автоматически получала разрешение рабочего стола пользователя.
Я нашел решения только для окон до сих пор - есть способ/библиотека, чтобы найти разрешение на Windows/Mac/Linux?
Существует несколько библиотек, которые помогут вам получить работу на низкоуровневом уровне. В любом случае вам, вероятно, понадобится больше вещей на этих платформах, поэтому я перечислил некоторые из них:
GLFW предоставляет кроссплатформенную (для Windows, Mac и Linux) способ получить режим настольного видео. Это C api, но будет работать на С++. Соответствующая функция (и документация) находится здесь:
void glfwGetDesktopMode( GLFWvidmode *mode )
Параметры
mode
Указатель на структуру GLFWvidmode
, которая будет заполнена функцией.
Возвращаемые значения
Структура GLFWvidmode
, на которую указывает режим, заполняется режимом настольного видео.
Описание
Эта функция возвращает режим видео в рабочем столе в структуре GLFWvidmode
. См. glfwGetVideoModes
для определения структуры GLFWvidmode
.
Примечания
Глубина цвета на рабочем столе всегда сообщается как количество бит для каждого отдельного цвета (красный, зеленый и синий), даже если на рабочем столе не используется цветной формат RGB или RGBA. Для Например, индексированный 256-цветный дисплей может сообщать RedBits = 3, GreenBits = 3 и BlueBits = 2, что добавляет до 8 бит.
Режим видео на рабочем столе - это видеорежим, используемый на рабочем столе в то время, когда окно GLFW было , а не текущий видеорежим (который может отличаться от режима настольного видео, если GLFW window - полноэкранное окно).
typedef struct {
int Width, Height; // Video resolution
int RedBits; // Number of red bits
int GreenBits; // Number of green bits
int BlueBits; // Number of blue bits
} GLFWvidmode;
См. ответ Jonas Wielicki для альтернатив.
Я сделал кроссплатформенную функцию c++:
#if WIN32
#include <windows.h>
#else
#include <X11/Xlib.h>
#endif
//...
void getScreenResolution(int &width, int &height) {
#if WIN32
width = (int) GetSystemMetrics(SM_CXSCREEN);
height = (int) GetSystemMetrics(SM_CYSCREEN);
#else
Display* disp = XOpenDisplay(NULL);
Screen* scrn = DefaultScreenOfDisplay(disp);
width = scrn->width;
height = scrn->height;
#endif
}
int main() {
int width, height;
getScreenResolution(width, height);
printf("Screen resolution: %dx%d\n", width, height);
}
Я думаю, что это не работает с несколькими мониторами. Кто-нибудь имел опыт работы с разрешениями на мультиблочных мониторах?