2012-11-16 38 views
8

我正在製作C++遊戲,並希望它自動獲取用戶的桌面分辨率。C++中的便攜式方式獲取桌面分辨率

我發現迄今爲止只有windows的解決方案 - 有沒有一種方法/庫來找到Windows/Mac/Linux上的分辨率?

+1

顯然Qt有'QApplication :: desktop() - > screenGeometry();'。這不是從文檔中提取出來的,我從來沒有使用過Qt,所以如果錯誤是很抱歉的。 – chris

+6

我不覺得有什麼完全可移植的存在... – Mysticial

+0

圖形的便攜式代碼?沒門。 (@Mystical +1) – 2012-11-16 17:43:17

回答

7

有幾個庫可以幫助你獲得底層的東西。你可能需要更多的東西在這些平臺上反正,所以我會列出一些:

  • SFMLC++庫抽象得多的I/O的東西,包括顯示管理。還支持多個平臺。
  • 經典SDL雖然是C庫廣泛應用於平臺無關的遊戲開發並支持多種平臺。像SFML一樣,它不僅僅是顯示管理。
  • GLFW,見wardds answer,也是一個C庫和也構成了一個抽象層,但更側重於顯示器和鍵盤/鼠標的I/O而不是更廣泛的I/O(音頻等)
+0

哦,我已經使用了SFML。我不知道它有這樣的功能,感謝您的幫助! :) –

+0

[這篇博客文章,獲取當前顯示模式](https://sfmlcoder.wordpress.com/2011/06/12/video-modes-and-windowing/)給出了代碼如何操作。 –

5

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's answer替代品。

+1

歡呼聲回答交叉引用 –