gdk_screen_get_default() returns null
gdk_screen_get_default() returns null
请帮助此初学者的程序以获取GDK屏幕属性。我有一个小的C 程序来找出连接的显示单元。我在Linux Debian上使用C 。gdk_screen_get_default()
不返回Screen
对象。如果我不检查屏幕对象,则会发生以下错误。
错误 (过程:8023(:GDK-Critical **:GDK_SCREEN_GET_MONITOR_GEOMETRY:断言'gdk_is_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;
}
}
2017年4月27日编辑:已解决
#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;
}
回答我自己的问题。
最后,弄清楚了分辨率。在获取屏幕之前,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.
相关文章:
- gdk_screen_get_default() returns null
- FindClass returns null
- SDL_ttf TTF_OpenFont returns NULL
- PKCS7_sign returns null
- C++ CreateWindowEx returns NULL
- wglGetProcAddress returns NULL
- cvCaptureFromCAM(CV_CAP_ANY) returns NULL
- gethostbyaddr() returns null
- glfwCreateWindow returns NULL
- CreateWindowEx returns NULL
- CreateFileMapping() returns null
- C++ LoadLibrary Returns Null
- Jni FindClass returns NULL
- SDL/TTF: TTF_RenderText_Blended_Wrapped returns NULL
- osg::GraphicsContext::WindowingSystemInterface returns null
- JNI- FindClass returns null
- VFW: AVIStreamGetFrameOpen() returns NULL
- engOpen returns Null
- avformat_alloc_context returns null
- TinyXML2 returns Null?