在睡意朦胧之际,记录下晚上的一个小错误。
先说一下导致这个错误的代码片段:
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);