在C++中以可移植的方式获得桌面分辨率
Portable way in C++ to get desktop resolution
我正在制作一款C++游戏,我希望它能自动获得用户的桌面分辨率。
到目前为止,我已经找到了仅限windows的解决方案——有没有一种方法/库可以在windows/Mac/Linux上找到分辨率?
有几个库可以帮助您解决底层问题。无论如何,你可能需要在这些平台上更多的东西,所以我会列出一些:
- SFML是一个C++库抽象了许多I/O内容,包括显示管理。还支持多个平台
- 经典的SDL虽然是一个C库,但在独立于平台的游戏开发中被广泛使用,并支持多个平台。与SFML一样,它所做的不仅仅是显示管理
- GLFW,见wardds答案,也是一个C库,也提出了一个抽象层,但更专注于显示器和键盘/鼠标I/O,而不是更广泛的I/O(音频等)
GLFW提供了一种跨平台(适用于Windows、Mac和Linux)的方式来获得桌面视频模式。它是一个C api,但它将在C++中工作相关功能(和文档)在这里:
void glfwGetDesktopMode( GLFWvidmode *mode )
参数
mode
指向GLFWvidmode
结构的指针,该结构将由函数填写。
返回值
模式所指的GLFWvidmode
结构用桌面视频模式填充。
描述
此函数以GLFWvidmode
结构返回桌面视频模式。参见glfwGetVideoModes
用于CCD_ 7结构的定义。
票据
桌面显示器的颜色深度总是以每种颜色的位数报告组件(红色、绿色和蓝色),即使桌面未使用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%dn", width, height);
}
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 试图在visual studio上用C++创建一个桌面应用程序
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 获取用C/C++打印的最后一个字符串
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 重载方法的方式会在使用临时调用时生成编译器错误
- 如何为 QT Windows 应用程序设置不同的桌面快捷方式图标和任务栏图标不同
- 以编程方式更改桌面背景
- 在C++中以可移植的方式获得桌面分辨率
- 如何获取哪些快捷方式和文件在桌面等文件夹路径中突出显示
- 在Gnome或KDE中以编程方式移动桌面上的应用程序窗口
- 如何以编程方式检查Windows Server 2016上是否安装了桌面体验