Я делаю С++-игру, и я хочу, чтобы она автоматически получала разрешение рабочего стола пользователя.
Я нашел решения только для окон до сих пор - есть способ/библиотека, чтобы найти разрешение на 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);
}
		Я думаю, что это не работает с несколькими мониторами. Кто-нибудь имел опыт работы с разрешениями на мультиблочных мониторах?