免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hong106525654

用glade在对话框做了个绘图区后,画线时提示出错 [复制链接]

论坛徽章:
0
发表于 2006-12-12 20:33 |显示全部楼层
是这样做的
我点击菜单后  弹出一个对话框  并在对话框中画线

论坛徽章:
0
发表于 2006-12-12 21:13 |显示全部楼层
还是不清楚是在什么时候画的线。是在对话框的创建过程中还是某一事件处理函数中进行的?

如果方便,还是把代码的主要部分贴出来吧。

论坛徽章:
0
发表于 2006-12-13 08:43 |显示全部楼层
一个菜单的响应事件
     if(hisdialog==NULL)
        {
                hisdialog=create_dialog2();
        }
       
        gtk_widget_show(hisdialog);
        gdk_draw_line((GtkWidget *) lookup_widget (hisdialog,"hispic")->window,
                             ((GtkWidget *) lookup_widget (hisdialog, "hispic"))->style-> black_gc,0,0,10,10);

论坛徽章:
0
发表于 2006-12-13 10:29 |显示全部楼层
在 gtk_widget_show() 之后画线可以保证不会出现 gdk_draw_line: assertion `drawable != NULL' failed 这样的错误了,但是实际上 gdk_draw_line() 仍然是在 hisdialog 真正得到显示出来之前调用的(因为只有在这段程序执行完毕之后 hisdialog 以及它的子 widget 才能实际显示出来),而第一次显示的 widget 总要重画自己,所以以前用 gdk_draw_line() 画的线就被看不见了。

因此,其中的关键就是:应该等到 widget 显示出来之后再进行 GDK 的描绘操作。在程序的形式上,一般gtk_widget_show() 和 gdk_draw_line() 应该分别位于不同的事件处理函数中(比如可以把 gdk_draw_line() 放到 绘图区的 expose_event 的处理函数中)。

论坛徽章:
0
发表于 2006-12-13 13:18 |显示全部楼层
谢谢版主了    请问版主是怎么学GTK的  有没有什么资料推荐一下

论坛徽章:
0
发表于 2006-12-13 21:12 |显示全部楼层
GTK 的主页(http://www.gtk.org/)上列举的资料还是比较丰富的。在 Document 一栏中除了常用的 Reference 之外,还有 FAQ、Tutorials、Papers 等。另外,Other document... 也不容错过。

在源码软件包中也包括了很多示例程序,可学习使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP