2017-04-26 7 views
2

S'il vous plaît aider avec le programme de ce débutant pour récupérer les attributs d'écran gdk. J'ai un petit programme C++ pour trouver les unités d'affichage connectées. J'utilise C++ sur Linux Debian. gdk_screen_get_default() ne renvoie pas Screen objet. Si je ne vérifie pas l'objet écran, l'erreur suivante se produit.gdk_screen_get_default() renvoie null

Erreur (processus: 8023): Gdk CRITIQUES **: gdk_screen_get_monitor_geometry: affirmation 'GDK_IS_SCREEN (écran)' a échoué

Je suis passé par les commentaires et renvoyé à this au-dessous extrait de code.

Merci pour votre aide. Tout pointeurs/lignes directrices pour résoudre ce problème serait utile.

je un moniteur connecté et les paramètres d'affichage sont

$ echo $XDG_CURRENT_DESKTOP 
GNOME 

$ echo $DISPLAY 
:0 

CODE

#include <gdk/gdk.h> 
    #include <iostream> 

    /* 
    GTK version 3.14.5 
    g++ getScreenInfo.cpp -o getScreenInfo `pkg-config gtk+-3.0 --cflags --libs` 
    */ 

    int main() 
    { 
     GdkScreen *screen; 
     screen = gdk_screen_get_default();   
     int num_monitors; 
     int i; 

     if (screen) 
     { 
      num_monitors = gdk_screen_get_n_monitors(screen); 

      for (i = 0; i < num_monitors; i++) 
      { 
       GdkRectangle rect; 
       gdk_screen_get_monitor_geometry (screen, i, &rect); 
       std::cout << "monitor " << i << ": coordinates (" << rect.x << "," 
       << rect.y << ", size (" << rect.width << "," << rect.height << ")" 
       << std::endl; 
      } 
     }else 
     { 
      std::cout << "Couldn't obtain default screen object" << std::endl; 
     } 
    } 

27 avr 2017 EDIT: RÉSOLU

#include <iostream> 
    #include <gdk/gdk.h> 
    #include <gtk/gtk.h> 

    /* 
    GTK version 3.14.5 

    To compile: 

    g++ getScreenInfo.cpp -o getScreenInfo `pkg-config gtk+-3.0 --cflags --libs` 

    */ 

    int main(int argc, char *argv[]) 
    { 
    gtk_init(&argc, &argv); 

    GdkScreen *screen = gdk_screen_get_default(); 



    int num_monitors; 
    int i; 

    if (screen) 
    { 
     num_monitors = gdk_screen_get_n_monitors(screen); 

     for (i = 0; i < num_monitors; i++) 
     { 
      GdkRectangle rect; 
      gdk_screen_get_monitor_geometry (screen, i, &rect); 
      std::cout << "monitor " << i << ": offsets (" << rect.x << "," 
      << rect.y << ", size (" << rect.width << "," << rect.height << ")" 
      << std::endl; 
     } 
    } 
    else 
    { 
     std::cout << "Couldn't obtain default screen object" << std::endl; 
    } 

    // To query primary display properties 

    guint monitor = gdk_screen_get_primary_monitor(screen); 
    GdkRectangle screen_geometry = { 0, 0, 0, 0 }; 
    gdk_screen_get_monitor_geometry(screen, monitor, &screen_geometry); 
    std::cout << screen_geometry.x << std::endl; 
    std::cout << screen_geometry.y << std::endl; 
    std::cout << screen_geometry.width << std::endl; 
    std::cout << screen_geometry.height << std::endl; 
    } 
+1

Veuillez marquer la question comme acceptée au lieu de modifier le titre. Merci! :) – Alfabravo

Répondre

2

répondre à ma propre question .

Enfin, compris la résolution. gtk_init() manquait avant d'aller chercher l'écran. Ajouté que et inclure respective pour gtk/gtk.h et maintenant le code ressemble à

int main(int argc, char *argv[]) 
{ 
    gtk_init(&argc, &argv);     // <---- added this 

    GdkScreen *screen = gdk_screen_get_default(); 

    : 
    followed by rest of the code shared in the problem description above.