2017-09-08 22:40:34 mengxiangjia_linxi 阅读数 5486
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19347 人正在学习 去看看 马永亮

首先需要更改屏幕文件fb0权限,以供用户打开

终端命令行输入:

chmod 0777 /dev/fb0

vi 新建一个.c文件

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/mman.h>
#include<sys/ioctl.h>
#include<unistd.h>
#include<fcntl.h>
#include<linux/fb.h>

int main(int argc,char *argv[]){
    int fd;
    struct fb_var_screeninfo screen_info;
    fd = open("/dev/fb0",O_RDWR);
    ioctl(fd,FBIOGET_VSCREENINFO,&screen_info);
    printf("%d*%d\n",screen_info.xres,screen_info.yres);
    close(fd);
    return 0;
}

运行即可

以上代码通过打开/dev/fb0,利用ioctl系统调用获取屏幕属性信息存放在结构体变量screen_info中,xres和yres则分别是结构体fb_var_screeninfo中屏幕的横向纵向分辨率信息。而Framebuffer(fb)是用一个视频输出设备从包含完整的帧数据的一个内存缓冲区中来驱动的一个视频显示设备,而宏定义FBIOGET_VSCREENINFO则是让ioctl系统调用能从Framebuffer中获取相应的显示设备信息,宏定义的详情在/usr/include/linux/fb.h里。

通常得到800,600不一定是当前屏幕的分辨率,是默认的屏幕分辨率。

2019-02-15 22:06:00 weixin_30387423 阅读数 22
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19347 人正在学习 去看看 马永亮

获取当前分辨率

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/mman.h>
#include<sys/ioctl.h>
#include<unistd.h>
#include<fcntl.h>
#include<linux/fb.h>

int main(int argc,char *argv[]){
    int fd;                                                                              
    struct fb_var_screeninfo screen_info;
    fd = open("/dev/fb0",O_RDWR);
    ioctl(fd,FBIOGET_VSCREENINFO,&screen_info);
    printf("%d*%d\n",screen_info.xres,screen_info.yres);
    close(fd);
    return 0;
}

结果:

root@cocktail:~# vim screen_xy.c 
root@cocktail:~# ./screen_xy 
1152*864
root@cocktail:~# 

获取当前窗口大小

这里大小指的是一个满屏幕的窗口,按照当前字体大小所能显示的字体的行数与列数。
如果调整字体大小,结果会根据字体大小变化。这一结论在ssh工具界面也适用。

#include<stdio.h>
#include<stdlib.h>
#include<sys/ioctl.h>
#include<termios.h>
#include<signal.h>
#include<unistd.h>

int main(int argc,char *argv[]){                                                         
    struct winsize info;
    ioctl(STDIN_FILENO,TIOCGWINSZ,&info);
    printf("当前终端为%d行%d列\n",info.ws_row,info.ws_col);
    return 0;
}

结论:

root@cocktail:~# vim screen_wc.c 
root@cocktail:~# ./screen_wc
当前终端为23行89列
root@cocktail:~# 

转载于:https://www.cnblogs.com/sinpo828/p/10678945.html

2016-10-08 16:58:23 kelsel 阅读数 1123
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19347 人正在学习 去看看 马永亮
在linux下,经常需要设置程序全屏显示,GTK+中提供了获取屏幕分辨率的方式,然后只要根据得到的宽高设置窗口显示大小,同时使用gtk_window_set_decorated去掉边框和标题栏显示,就能实现相应的效果了。

下面程序,就是简单的给出了窗口满屏效果是如何实现的,为保证程序的正常退出,添加了键盘事件,按下Esc键,程序退出。

/*

 * Name: full_screen.c

 */

#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
/* the key value defines can be found here */
#include <stdio.h>

static void
on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
    switch(event->keyval)
    {
        case GDK_Escape:
            gtk_main_quit();
            break;
        default:
            break;
    }
}
int main(int argc, char *argv[])
{
    gtk_init(&argc, &argv);

    /* Get the Screen Resolution */
    GdkScreen* screen;
    gint width, height;
    screen = gdk_screen_get_default();
    width = gdk_screen_get_width(screen);
    height = gdk_screen_get_height(screen);
    printf("screen width: %d, height: %d\n", width, height);

    /* Create window and set full screen */
    GtkWidget *window;
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), width, height);
    gtk_window_set_decorated(GTK_WINDOW(window), FALSE); /* hide the title bar and the boder */

    gtk_widget_show (window);

    /* add key event for quit */
    g_signal_connect(G_OBJECT(window), \
            "key-press-event", \
            G_CALLBACK(on_key_press), NULL);

    gtk_main();

    return 0;
}


编译执行程序

$ gcc -g `pkg-config --cflags --libs gtk+-2.0` -o full_screen full_screen.c

$ ./full_screen

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(81) | 评论(0) | 转发(0) |
0

上一篇:PKG CONFIG

下一篇:ATP-GET常用操作

给主人留下些什么吧!~~
评论热议
2016-03-08 16:28:25 r77683962 阅读数 3158
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19347 人正在学习 去看看 马永亮
把这个程序运行下字符终端下到分辨率就出来了。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <math.h>

int w,h ,bpp;

int *fbmem;

int main(int argc , char *argv[])
{
int fd;
struct fb_var_screeninfo fb_var;

fd = open("/dev/fb0",O_RDWR);
//
//screen w , h , bpp
//get screen information
ioctl (fd,FBIOGET_VSCREENINFO,&fb_var);
w = fb_var.xres;
h = fb_var.yres;
bpp = fb_var.bits_per_pixel;
printf ("Framebuffer %d*%d-%dbpp\n",w,h,bpp);

//fbmem = Framebuffer address
fbmem = mmap (0,w*h*bpp/8,PROT_WRITE|PROT_READ,
MAP_SHARED,fd,0);
//y = 10,x = 200, color = 0xF800;

return 0;
}
2014-12-09 14:06:00 weixin_30564901 阅读数 86
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19347 人正在学习 去看看 马永亮
 

在Windows下可以使用GetSystemMetrics(SM_CXSCREEN);GetSystemMetrics(SM_CYSCREEN) 获取。

在Linux下可以使用XDisplayWidth ;XDisplayHeight ()获取。
在QT中呢?网上很多人说是QApplication::desktop()->width();QApplication::desktop()->height(); 这个方法对于单显示器模式当然没有问题。但是对于多显示器,特别是使用了扩展桌面的就会有问题了。今天上午仔细看了QDesktopWidget的帮助,需要使用QApplication::desktop()->screenGeometry();这个函数有好几个重载的版本,意思都一样。该函数返回一个QRect,这个QRect的宽和高就是所在Screen的分辨率。

转载于:https://www.cnblogs.com/lvdongjie/p/4153141.html

linux分辨率

阅读数 530

没有更多推荐了,返回首页