[英]Portable way in C++ to get desktop resolution
我正在制作一个C ++游戏,我想让它自动获得用户的桌面分辨率。
到目前为止,我找到了仅限Windows的解决方案 - 是否有方法/库可以在Windows / Mac / Linux上找到解决方案?
GLFW提供跨平台(适用于Windows,Mac和Linux)的方式来获得桌面视频模式。 它是一个C api ,但它可以在C ++中运行。 相关功能(和文档)在这里:
void glfwGetDesktopMode( GLFWvidmode *mode )
参数
mode
指向GLFWvidmode
结构的指针,该结构将由函数填充。
返回值
模式指向的GLFWvidmode
结构将填充桌面视频模式。
描述
此函数返回GLFWvidmode
结构中的桌面视频模式。 有关GLFWvidmode
结构的定义,请参阅glfwGetVideoModes
。
笔记
即使桌面未使用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对替代方案的回答 。
我做了一个跨平台的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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.