找回密码
 注册
查看: 698|回复: 1

gtk 中代码绘图的问题,何以两个类似的程序会有不同的结果??

[复制链接]
发表于 2003-2-2 01:22:52 | 显示全部楼层 |阅读模式
src_1:
//
# include <gtk/gtk.h>

void
ButtonClick (GtkButton *bt, gpointer data)
{
  GdkDrawable *drawable;
  GtkWidget      *drawingarea;
  
  drawingarea = GTK_WIDGET (data);
  drawable = drawingarea->window;

  gdk_draw_point (drawable, drawingarea->style->black_gc,
                              10, 10);
}

GtkWidget *
BuildUserInterfact (void)
{
  GtkWidget *vbox;
  GtkWidget *drawingarea;
  GtkWidget *button;

  vbox = gtk_vbox_new (FALSE, 5);
  gtk_widget_show (vbox);

  drawingarea = gtk_drawing_area_new ();
  gtk_box_pack_start (GTK_BOX (vbox), drawingarea, TRUE, TRUE, 5);
  
  button = gtk_button_new_with_label ("Click me to draw");
  gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
  
  gtk_signal_connect (GTK_OBJECT (button), "clicked",
                                   GTK_SIGNAL_FUNC (ButtonClick),   drawingarea);
  return vbox;
}

gint
main (gint argc, gchar **argv)
{
  GtkWidget *window;
  
  gtk_init (&argc, &argv);
  
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_signal_connect (GTK_OBJECT (window), "destroy",
                                   GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  gtk_container_add (GTK_CONTAINER (window),
                                   BuildUserInterface ());
  gtk_widget_show_all (window);

   gtk_main ();

  return 0;
}

//
src_2:

# include <gtk/gtk.h>

gint
main (gint argc, gchar **argv)
{
  GtkWidget *window;
  GdkDrawable *dable;
  GtkWidget *darea;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_signal_connect (GTK_OBJECT (window), "destroy",
                                   GTK_SIGNAL_FUNC (gtk_main_quit), NULL);

  darea = gtk_drawing_area_new ();

  gtk_container_add (GTK_CONTAINER (window), darea);

  dable = darea->window; // or dable = GDK_DRAWABLE (darea->window);

-->>  gdk_draw_point (dable, darea->style->black_gc, 10, 10);
  gtk_widget_show_all (window);

  gtk_main ();

  return 0;
}

////////////////

src_1:  可以运行
src_2:  总是出错 assert ( dable != NULL) 也就是箭头指向的语句!
/////////////
谁能告诉我这是怎么回事?? 谢谢!
发表于 2003-2-3 12:47:56 | 显示全部楼层
建议看看,GDK/Xlib的参考手册,

因为darea->window在你用它之前还没有建立,而
show事件可以建立它,当然还有其它函数可以建立它。

一句话,把gtk_widget_show_all(window)提前就OK了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-25 22:21 , Processed in 0.032449 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表