GtkButton由GtkDrawingArea覆盖

时间:2013-06-26 19:39:43

标签: c gtk

我试图在C上的GtkDrawingArea上放置一个按钮(GUI是从glade文件生成的)。在Glade中,我将GtkDrawingArea和GtkButton放入GtkFixed容器中。我可以点击按钮所在的位置和按钮"点击"成功调用了事件处理程序,但该按钮隐藏在GtkDrawingArea后面。在'#34;揭露 - 事件"绘图区的处理程序我有这个:

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);

除了重新包装之外,它没有任何错误,但它也没有任何错误。
有任何想法吗? 提前谢谢,

1 个答案:

答案 0 :(得分:0)

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

 {
 // 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;
}