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);





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章