我试图在C中的GtkDrawingArea上放置一个按钮(GUI是从林间空地文件生成的)。在Glade中,我将GtkDrawingArea和GtkButton都放入了GtkFixed容器中。我可以单击按钮应该位于的位置,并成功调用按钮“ clicked”事件处理程序,但是该按钮隐藏在GtkDrawingArea后面。在绘图区域的“暴露事件”处理程序中,我有以下内容:

gboolean on_drawArea_expose_event(GtkWidget *widget, GdkEventExpose *expose, gpointer data)
{
   // draw on drawingArea
   gdk_window_restack( button->window, widget->window, TRUE);
   return FALSE;
}


我收到以下错误:

gdk_window_restack: assertion 'gdk_window_is_toplevel (GDK_WINDOW_OBJECT (sibling)' failed


我试过了:

gdk_window_raise( button->window);


同样,它也没有抛出任何错误,但没有重新堆叠,但是也没有起作用。
有任何想法吗?
提前致谢,

最佳答案

所以我最终在GtkButton小部件所在的相同位置的DrawingArea中手动绘制了按钮。

 {
 // within expose event handler
 // draw desired image onto GdkPixmap
 // code to draw pix map goes here
 // check to see if GtkButton exists
 if( button != NULL )
 {
     GdkGC *buttonGC = gdk_gc_new( myPixmap );
     PangoLayout *buttonLayout =          gtk_widget_create_pango_layout( button, "press me");
     gdk_draw_layout( myPixmap, buttonGC, button->allocation.x, button->allocation.y, buttonLayout);
  }

 gdk_draw_drawable ( myparameters, ...);
 // clean up variables
return;
}

10-06 00:37