[英]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.