首先是屏幕的宽高是很容易获取的。所以就不多说了。
这里的Resolution,不是指宽高,而是指dpi。
错误算法
试图想自己计算的肯定不对,结果一直是96。典型的如下:
GTK: GdkDisplay* display = gdk_display_get_default(); GdkScreen* screen = gdk_screen_get_default(); int width = gdk_screen_get_width( screen); int widthmm = gdk_screen_get_width_mm(screen); printf("width=%d, widthmm=%d\n", width, widthmm); x11: Display *display = XOpenDisplay(NULL); if (display == NULL) { fprintf(stderr, "Cannot open display\n"); exit(1); } int screen = DefaultScreen(display); double xres = ((((double) DisplayWidth(display,screen)) * 25.4)/ ((double) DisplayWidthMM(display,screen))); double yres = ((((double) DisplayHeight(display,screen)) * 25.4)/ ((double) DisplayHeightMM(display,screen)));
正确函数gdk
这个是反复在网上搜索,终于找到的。
gtk_init(NULL, NULL); GdkScreen* screen = gdk_screen_get_default(); printf("resolution=%f\n", gdk_screen_get_resolution(screen));
正确函数x11
XResourceManagerString是从友商学习到的。初次看到这个函数名,觉得难以置信。
Display* pDisplay = XOpenDisplay(NULL); printf("%s\n", XResourceManagerString(pDisplay)); //会崩溃 //int screen = DefaultScreen(pDisplay); //printf("%s\n", XScreenResourceString(screen)); 输出的最后: Xcursor.size: 24 Xcursor.theme: dark-sense Xft.antialias: 1 Xft.dpi: 96 Xft.hinting: 1 Xft.hintstyle: hintslight Xft.lcdfilter: lcddefault Xft.rgba: rgb
Xft.dpi: 96就是我们迫切需要的东西。