我正在制作一款C ++游戏,我希望它能自动获得用户的桌面分辨率。
到目前为止,我找到了仅限Windows的解决方案 - 是否有方法/库可以在Windows / Mac / Linux上找到解决方案?
答案 0 :(得分:7)
有几个库帮助您获得低级别的东西。无论如何你可能需要在这些平台上有更多东西,所以我会列出一些:
答案 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);
}