C+中的可移植方式+;获取桌面分辨率 我正在制作一个C++游戏,我希望它能自动获得用户的桌面分辨率。

C+中的可移植方式+;获取桌面分辨率 我正在制作一个C++游戏,我希望它能自动获得用户的桌面分辨率。,c++,gcc,portability,screen-resolution,C++,Gcc,Portability,Screen Resolution,到目前为止,我已经找到了仅适用于windows的解决方案-有没有一种方法/库可以在windows/Mac/Linux上找到解决方案?提供了一种跨平台(适用于windows、Mac和Linux)的方法来获取桌面视频模式。它是一个 C API >,但是相关函数(和文档)在这里: void glfwGetDesktopMode(GLFWvidmode*模式) 参数 模式 指向GLFWvidmode结构的指针,该结构将由函数填写 返回值 模式指向的GLFWvidmode结构由桌面视频模式填充 说明 此函

到目前为止,我已经找到了仅适用于windows的解决方案-有没有一种方法/库可以在windows/Mac/Linux上找到解决方案?

提供了一种跨平台(适用于windows、Mac和Linux)的方法来获取桌面视频模式。它是一个<强> C API >,但是<<强>将在C++中工作。< /强>相关函数(和文档)在这里:

void glfwGetDesktopMode(GLFWvidmode*模式)

参数

模式
指向
GLFWvidmode
结构的指针,该结构将由函数填写

返回值

模式指向的
GLFWvidmode
结构由桌面视频模式填充

说明

此函数以
GLFWvidmode
结构返回桌面视频模式。请参见
glfwGetVideoModes
有关
GLFWvidmode
结构的定义

注释

桌面显示器的颜色深度始终报告为每种颜色的位数 组件(红色、绿色和蓝色),即使桌面未使用RGB或RGBA颜色格式。对于 例如,索引的256色显示器可能会报告RedBits=3、GreenBits=3和BlueBits=2,这 总计为8位

桌面视频模式是GLFW窗口打开时桌面使用的视频模式 打开,而不是当前视频模式(如果GLFW 窗口是一个全屏窗口)


请参阅以获取替代方案。

有几个库可以帮助您解决底层问题。在这些平台上,您可能需要更多的东西,因此我将列出一些:

  • 是一个C++库抽象了许多I/O内容,包括显示管理。还支持多个平台
  • 经典的,虽然是一个C库被广泛应用于平台无关的游戏开发中,并支持多个平台。与SFML一样,它不仅仅做显示管理
  • ,另请参见一个C库,它还提供了一个抽象层,但更侧重于显示和键盘/鼠标I/O,而不是更广泛的I/O(音频等)

我做了跨平台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);
}
#如果是WIN32
#包括
#否则
#包括
#恩迪夫
//...
void getScreenResolution(整数和宽度、整数和高度){
#如果是WIN32
宽度=(int)GetSystemMetrics(SM_CXSCREEN);
高度=(int)GetSystemMetrics(SM_CYSCREEN);
#否则
Display*disp=XOpenDisplay(空);
Screen*scrn=默认屏幕显示(disp);
宽度=scrn->宽度;
高度=scrn->高度;
#恩迪夫
}
int main(){
int宽度、高度;
获取屏幕分辨率(宽度、高度);
printf(“屏幕分辨率:%dx%d\n”,宽度、高度);
}

Qt显然有
QApplication::desktop()->screenGeometry()。这不是从文档中提取的,我从来没有使用过Qt,所以如果它是错误的,那么很抱歉。我不认为存在完全可移植的东西…用于图形的可移植代码?不可能。(@Mystical+1)哦,我已经在用SFML了。我不知道它有这样的功能,谢谢你的帮助!:)给出了如何执行的代码。
#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);
}