Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何让Gtk2 GtkDrawingArea的XID嵌入Mplayer_C_Embed_Gtk2_Gdk - Fatal编程技术网

C 如何让Gtk2 GtkDrawingArea的XID嵌入Mplayer

C 如何让Gtk2 GtkDrawingArea的XID嵌入Mplayer,c,embed,gtk2,gdk,C,Embed,Gtk2,Gdk,我正在编写一个Gtk2应用程序,它需要Mplayer在GtkDrawingArea中播放视频。据我所知,如果可以找到gtkdrawingara的XID并将其作为参数传递给Mplayer,这是可能的。但是,我使用下面的代码片段 long videoID; GtkWidget *videoWindow = NULL; /* need be done only once on Namb2Client startup */ InitEGM( &egm );

我正在编写一个Gtk2应用程序,它需要
Mplayer
GtkDrawingArea
中播放视频。据我所知,如果可以找到
gtkdrawingara
的XID并将其作为参数传递给Mplayer,这是可能的。但是,我使用下面的代码片段

long videoID;                 
GtkWidget *videoWindow = NULL;


/* need be done only once on Namb2Client startup */
InitEGM( &egm );    

/* Init GTK+ */
gtk_init( &argc, &argv );

/* Create new GtkBuilder object */
builder = gtk_builder_new();

/* Load UI from file. If error occurs, report it and quit application. */
if( !gtk_builder_add_from_file( builder, "layout.xml", &error ) )
{
    g_warning( "%s", error->message );
    g_free( error );
    return( 1 );
}

/* Get main window pointer from UI */
window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) );
gtk_window_position(GTK_WINDOW(window), (GtkWindowPosition)GTK_WIN_POS_CENTER);


MainWnd = GTK_WIDGET( gtk_builder_get_object( builder, "MainWnd" ) );

// Setup area for Mplayer video
videoWindow = gtk_drawing_area_new ();
gtk_widget_set_size_request (videoWindow, 640, 180);
gtk_fixed_put((GtkFixed *)MainWnd, videoWindow, 414, 24 );
gtk_widget_show( videoWindow );    
videoID = gdk_x11_drawable_get_xid( videoWindow );
g_printf("XID = %ld\n", videoID);
当我运行应用程序时,出现以下错误:

(egm:3872): Gdk-WARNING **: gdkdrawable-x11.c:952 drawable is not a pixmap or window
XID = 0

获取
GtkDrawingArea
的XID的正确方法是什么?任何帮助都将不胜感激。

发现问题。我需要确保调用
gtk\u widget\u realize()
。如果未完成此操作,则小部件未完全创建,也未分配X11 XID

// Setup area for Mplayer video
videoWindow = gtk_drawing_area_new ();
gtk_widget_set_size_request (videoWindow, 640, 180);
gtk_fixed_put((GtkFixed *)MainWnd, videoWindow, 414, 24 );
gtk_widget_realize( videoWindow );
gtk_widget_show( videoWindow );    
videoID = GDK_WINDOW_XWINDOW (GTK_WIDGET (videoWindow)->window);
g_printf("XID = %ld\n", videoID);

谢谢你的回答,奇美拉。帮助了我。对于Windows,
GDK_窗口(GTK_小部件(视频窗口)->WINDOW)
工作正常。@fapw欢迎您。我很高兴我能为其他人提供一些帮助。你好@Chimera。请告诉我,在gtk_绘图区播放视频是否成功。我在问,因为我在这方面有困难。谢谢。@fapw是的,我能做到。我把打印好的XID作为命令行参数提供给mplayer,并在gtk_绘图区内播放视频。谢谢你的回答,@Chimera。这对我来说是个好消息。看来我的问题是别的。继续挖掘。祝您有个美好的一天。