2017-04-26 3 views
2

gdk 화면 속성을 가져 오는이 초보자 프로그램에 도움을주십시오. 나는 연결되어있는 디스플레이 유닛을 찾기 위해 작은 C++ 프로그램을 가지고있다. Linux 데비안에서 C++을 사용하고 있습니다. gdk_screen_get_default()Screen 개체를 반환하지 않습니다. 화면 개체를 확인하지 않으면 다음 오류가 발생합니다.gdk_screen_get_default()가 null을 반환합니다.

오류 (공정 : 8023) : GDK-CRITICAL ** : gdk_screen_get_monitor_geometry : 주장 'GDK_IS_SCREEN (화면)'나는 관련 게시물을 통해 가서 아래를 위해 this 언급

실패 코드 스 니펫.

도움 주셔서 감사합니다. 이 문제를 해결하기위한 지침/지침이 도움이 될 것입니다.

나는 하나 개의 모니터가 연결하고 디스플레이 설정이

$ 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; 
     } 
    } 

2017년 4월 27일 EDIT 있습니다 : 내 자신의 질문에 대답 해결

#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

제목을 편집하는 대신 허용되는 것으로 표시하십시오. 감사! :) – Alfabravo

답변

2

.

마지막으로 해상도를 알아 냈습니다. 화면을 가져 오기 전에 gtk_init()가 누락되었습니다. gtk/gtk.h에 해당 내용을 추가했으며 코드는 다음과 같습니다.

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. 
관련 문제