IA__gdk_gc_new: assertion 'drawable != NULL' failed

来源:互联网 发布:网络新词汇 编辑:程序博客网 时间:2024/06/05 11:29

在睡意朦胧之际,记录下晚上的一个小错误。

先说一下导致这个错误的代码片段:

draw_able=draw_area->window;
gc=gdk_gc_new(draw_able);


事实上,单单看这个片段是看不出原因的,出错说:因为draw_able!=NULL是失败的导致的,就是说我们的draw_able是NULL的。不可能啊,前面不是有一个draw_able=draw_area->window了吗?

后来我查看了下网上的说法,在窗口还没显示前,空窗口不可用。也就是说draw_area->window还是个没有显示的空窗口。 要在显示了之后才能用,所以我们在显示后再调用这两个语句。(为什么显示后才行呢)

我还是一知半解,但是解决的关键确实是这样的,在gtk_widget_show(draw_area);
gtk_widget_show(window);这两句显示窗口的语句后再调用前面说到的出错代码段,再次执行,错误解除。


因为GdkGC在绘图中经常要用到,而且是用到不同的gc,(不同颜色),所以我希望一开始就能初始化好一些。

但是如果直接gc1=gc;gdk_gc_set_rgb_fg_color(gc1,&color_white);//color_white是自己定义的color

是不行的,因为指针传地址,直接把原来gc的值也给改变了,弄来弄去所有的gc都是一个样了。


所以要想事先定义好gc方便使用,应这样:

gc_white=gdk_gc_new(draw_able);gc_red=gdk_gc_new(draw_able);gc_green=gdk_gc_new(draw_able);gdk_gc_set_rgb_fg_color(gc_white,&color_white);gdk_gc_set_rgb_fg_color(gc_green,&color_green);gdk_gc_set_rgb_fg_color(gc_red,&color_red);





0 0
原创粉丝点击