gdk_screen_get_default () возвращает ноль

Пожалуйста, помогите с программой для начинающих для получения атрибутов экрана GDK. У меня есть небольшая программа C ++, чтобы узнать подключенные дисплеи. Я использую c ++ на Linux Debian. gdk_screen_get_default() не возвращается Screen объект. Если я не проверяю объект на экране, возникает следующая ошибка.

ошибка
(процесс: 8023): Gdk-CRITICAL **: gdk_screen_get_monitor_geometry: утверждение ‘GDK_IS_SCREEN (screen)’ не выполнено

Я просмотрел соответствующие посты и сослался на этот для приведенного ниже фрагмента кода.

Спасибо за вашу помощь. Любые указатели / рекомендации для решения этой проблемы будут полезны.

У меня подключен один монитор и настройки дисплея

$ echo $XDG_CURRENT_DESKTOP
GNOME

$ echo $DISPLAY
:0

КОД

    #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 апреля 2017 РЕДАКТИРОВАТЬ: РЕШЕНО

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

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.
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]