簡體   English   中英

在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結構中的桌面視頻模式。 有關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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM