在C ++中以便携式方式获取桌面分辨率

时间:2012-11-16 17:22:14

标签: c++ gcc portability screen-resolution

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

到目前为止,我找到了仅限Windows的解决方案 - 是否有方法/库可以在Windows / Mac / Linux上找到解决方案?

3 个答案:

答案 0 :(得分:7)

有几个库帮助您获得低级别的东西。无论如何你可能需要在这些平台上有更多东西,所以我会列出一些:

  • SFML是一个 C ++库,它抽象了许多I / O内容,包括显示管理。还支持多个平台。
  • 经典SDL虽然是 C库,但它广泛用于独立于平台的游戏开发,并支持多种平台。与SFML一样,它不仅仅是显示管理。
  • GLFW,请参阅wardds answer,也是 C库,并且还提供了一个抽象层,但更侧重于显示和键盘/鼠标I / O而不是更广泛的I / O(音频等)

答案 1 :(得分:5)

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

void glfwGetDesktopMode( GLFWvidmode *mode )

<强>参数

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

返回值

模式指向的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's answer

答案 2 :(得分:2)

我做了一个跨平台的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);
}