0

我试图在 C 中的 GtkDrawingArea 上放置一个按钮(GUI 是从一个 gade 文件生成的)。在 Glade 中,我将 GtkDrawingArea 和 GtkButton 都放入了 GtkFixed 容器中。我可以单击按钮应该在的位置,成功调用按钮“单击”事件处理程序,但按钮隐藏在 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);

除了重新堆叠之外,这也没有引发任何错误,但它也不起作用。
有任何想法吗?提前致谢,

4

1 回答 1

0

所以我最终在 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;
}
于 2013-06-27T14:37:13.477 回答