<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[请教]如何用gtk/gdk编程实现图像的平移？]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 25 May 2009 07:04:35 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	我想把现有的图像(比如：一个点)从作图区的左边移到右边，怎么实现？<br/><br/>我用过expose_event，通过画点 --> 用矩形填充 --> 再在新的位置画点... ... ，但是这样最终貌似只有最终的效果图（要么是矩形，要么是右侧的点），没有中间的动态过程。<br/><br/>向大家请教~~！<br/><br/>下面是一个画正弦曲线的例子，请教大家如何将画曲线的过程动态的显示出来呢？<br/>代码:<br/>#include <gtk/gtk.h><br/>#include <math.h><br/>static gint expose_event(GtkWidget *widget, GdkEventExpose *event)<br/>&#123;<br/>&nbsp;&nbsp;int i;<br/>&nbsp;&nbsp;GdkGC *gc;<br/>&nbsp;&nbsp;GdkColormap *colormap;<br/>&nbsp;&nbsp;GdkColor color;<br/> <br/>&nbsp;&nbsp;gc=gdk_gc_new(widget->window);<br/>&nbsp;&nbsp;colormap=gtk_widget_get_colormap(widget);<br/>&nbsp;&nbsp;gdk_color_parse("red",&color);<br/>&nbsp;&nbsp;gdk_color_alloc(colormap,&color);<br/>&nbsp;&nbsp;gdk_gc_set_foreground(gc,&color);<br/> <br/>&nbsp;&nbsp;/*画正弦曲线*/<br/> <br/>&nbsp;&nbsp;for(i=1;i<400;i++)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gdk_draw_line(widget->window,gc,i,200+100*sin(6.28*i/400),i+1,200+100*sin(6.28*(i+1)/400));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;gdk_gc_unref(gc);<br/>&nbsp;&nbsp;return FALSE;<br/>&#125;<br/><br/> int main(int argc,char **argv)<br/>&#123;<br/>&nbsp;&nbsp;GtkWidget *win_main, *draw_area;<br/> <br/>&nbsp;&nbsp;gtk_init(&argc,&argv);<br/> <br/>&nbsp;&nbsp;win_main=gtk_window_new(GTK_WINDOW_TOPLEVEL);<br/>&nbsp;&nbsp;gtk_widget_set_usize(win_main,400,400);<br/> <br/>&nbsp;&nbsp;draw_area = gtk_drawing_area_new();<br/>&nbsp;&nbsp;gtk_container_add(GTK_CONTAINER(win_main), draw_area);<br/>&nbsp;&nbsp;gtk_widget_show(draw_area);<br/> <br/>&nbsp;&nbsp;gtk_signal_connect(GTK_OBJECT(draw_area), "expose_event",<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(GtkSignalFunc) expose_event, NULL);<br/>&nbsp;&nbsp;gtk_signal_connect (GTK_OBJECT (win_main), "destroy",<br/>&nbsp;&nbsp;GTK_SIGNAL_FUNC (gtk_exit), NULL);<br/> <br/>&nbsp;&nbsp;gtk_widget_set_events(draw_area, GDK_EXPOSURE_MASK);<br/> <br/>&nbsp;&nbsp;gtk_widget_show(win_main);<br/> <br/>&nbsp;&nbsp;gtk_main();<br/>&nbsp;&nbsp;return 0;<br/>&#125;<br/><br/>realtang &nbsp;&nbsp;08-02-03 09:50<br/>This is an event signal, initially emitted when the connected widget becomes fully visible on screen.<br/>Expose events are also generated when a widget has been partially or fully covered by another widget, and is re-exposed.<br/>expose事件只是widget被遮挡后重新出现才发生的或者第一次出现时发生。<br/>在你的这个例子里面，你的这个draw_area在出现在屏幕上以后，才会去调用expose_event函数。<br/>而且事件处理函数都应该是很快执行完的，因为所有的GUI都在一个线程里面，如果像你要求的显示画的过程，那就把其它事件都给阻塞了。<br/>不过你可以采用gtk_widget_queue_draw_area()强制产生expose事件。<br/>另外要补充的，现在的gc就在widget的style对象中，所以不需要new了。
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [请教]如何用gtk/gdk编程实现图像的平移？]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>