IA__gdk_gc_new: assertion 'drawable != NULL' failed

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

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

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值