我试图在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;
}