Vit*_*meo 10 c++ portability gcc screen-resolution
我正在制作一个C++游戏,我想让它自动获得用户的桌面分辨率.
到目前为止,我找到了仅限Windows的解决方案 - 是否有方法/库可以在Windows/Mac/Linux上找到解决方案?
我做了一个跨平台的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);
}
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
请参阅Jonas Wielicki对替代方案的回答.