11

我正在制作一个 C++ 游戏,我希望它能够自动获取用户的桌面分辨率。

到目前为止,我已经找到了仅限 Windows 的解决方案 - 有没有办法/库在 Windows/Mac/Linux 上找到分辨率?

4

3 回答 3

7

有几个库可以帮助您解决低级问题。无论如何,您可能在这些平台上需要更多东西,所以我将列出一些:

  • SFML是一个C++ 库,抽象了许多 I/O 内容,包括显示管理。还支持多个平台。
  • 经典的SDL虽然是一个C 库,但被广泛用于平台无关的游戏开发,并支持多个平台。与 SFML 一样,它不仅仅是显示管理。
  • GLFW,见wardds answer,也是一个C 库,也构成了一个抽象层,但更专注于显示和键盘/鼠标 I/O,而不是更广泛的 I/O(音频等)
于 2012-11-16T17:41:52.923 回答
6

GLFW提供了一种跨平台(适用于 Windows、Mac 和 Linux)的方式来获取桌面视频模式。它是一个C api,但它可以在 C++ 中工作。相关功能(和文档)在这里:

void glfwGetDesktopMode( GLFWvidmode *mode )

参数

mode 指向GLFWvidmode结构的指针,该结构将由函数填充。

返回值

mode 指向的GLFWvidmode结构用桌面视频模式填充。

描述

该函数以GLFWvidmode结构返回桌面视频模式。有关结构glfwGetVideoModes 的定义,请参阅GLFWvidmode

笔记

即使桌面不使用 RGB 或 RGBA 颜色格式,桌面显示器的颜色深度也始终报告为每个单独颜色分量(红色、绿色和蓝色)的位数。例如,一个索引为 256 色的显示器可能会报告 RedBits = 3、GreenBits = 3 和 BlueBits = 2,总计 8 位。

桌面视频模式是打开 GLFW 窗口时桌面使用的视频模式,而不是当前的视频模式(如果 GLFW 窗口是全屏窗口,可能与桌面视频模式不同)。

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 的答案

于 2012-11-16T17:39:32.930 回答
6

我做了一个跨平台的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);
}
于 2018-05-07T00:44:57.390 回答