sinanjj 发表于 2009-2-28 22:09

GDK的一点总结(不完全)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GDK&nbsp;introduce<br /><br />GDK是标准Xlib函数调用的一个基本封装(wrapper).<br />GDK&nbsp;(GIMP&nbsp;Drawing&nbsp;Kit)&nbsp;is&nbsp;a&nbsp;computer&nbsp;graphics&nbsp;library&nbsp;that&nbsp;acts&nbsp;as&nbsp;a&nbsp;wrapper<br />around&nbsp;the&nbsp;low-level&nbsp;drawing&nbsp;and&nbsp;windowing&nbsp;functions&nbsp;provided&nbsp;by&nbsp;the&nbsp;underlying<br />graphics&nbsp;system.<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pixmaps&nbsp;and&nbsp;drawables<br /><br />A&nbsp;pixmap&nbsp;is&nbsp;an&nbsp;off-screen&nbsp;buffer&nbsp;you&nbsp;can&nbsp;draw&nbsp;graphics&nbsp;into.&nbsp;In&nbsp;GDK,&nbsp;the<br />pixmap&nbsp;type&nbsp;is&nbsp;called&nbsp;GdkPixmap.&nbsp;A&nbsp;pixmap&nbsp;with&nbsp;a&nbsp;single&nbsp;bit&nbsp;representing<br />each&nbsp;pixel&nbsp;is&nbsp;called&nbsp;a&nbsp;bitmap;&nbsp;GDK's&nbsp;bitmap&nbsp;type&nbsp;is&nbsp;GdkBitmap.<br />A&nbsp;drawable&nbsp;is&nbsp;anything&nbsp;you&nbsp;can&nbsp;draw&nbsp;graphics&nbsp;on.&nbsp;GDK&nbsp;has&nbsp;a&nbsp;corresponding<br />type,&nbsp;called&nbsp;GdkDrawable(include&nbsp;GdkWindow,GdkPixmap,GdkBitmap).<br /><br />#include&nbsp;&ltgdk/gdk&gt<br />GdkPixmap*&nbsp;gdk_pixmap_new&nbsp;(GdkWindow*&nbsp;window,&nbsp;gint&nbsp;width,<br />&nbsp;&nbsp;&nbsp;&nbsp;gint&nbsp;height,&nbsp;gint&nbsp;depth);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;window&nbsp;is&nbsp;the&nbsp;surface&nbsp;pixmap&nbsp;to&nbsp;display&nbsp;*/<br />void&nbsp;gdk_pixmap_unref&nbsp;(GdkPixmap*&nbsp;pixmap);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;destroy&nbsp;a&nbsp;pixmap.&nbsp;*/<br />void&nbsp;gdk_draw_drawable&nbsp;(GdkDrawable&nbsp;*drawable,&nbsp;GdkGC&nbsp;*gc,&nbsp;GdkDrawable&nbsp;*src,<br />&nbsp;&nbsp;&nbsp;&nbsp;gint&nbsp;xsrc,&nbsp;gint&nbsp;ysrc,&nbsp;gint&nbsp;xdest,&nbsp;gint&nbsp;ydest,&nbsp;gint&nbsp;width,&nbsp;gint&nbsp;height);<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;colormaps&nbsp;and&nbsp;visuals<br /><br />A&nbsp;bitmap&nbsp;display&nbsp;consists&nbsp;of&nbsp;a&nbsp;rectangular&nbsp;grid&nbsp;of&nbsp;pixels.&nbsp;Each&nbsp;pixel&nbsp;consists<br />of&nbsp;some&nbsp;fixed&nbsp;number&nbsp;of&nbsp;bits.&nbsp;Pixels&nbsp;are&nbsp;mapped&nbsp;to&nbsp;visible&nbsp;colors.<br />In&nbsp;the&nbsp;X&nbsp;Window&nbsp;System,&nbsp;pixels&nbsp;represent&nbsp;entries&nbsp;in&nbsp;a&nbsp;color&nbsp;lookup&nbsp;table.&nbsp;A<br />color&nbsp;is&nbsp;a&nbsp;red,&nbsp;green,&nbsp;blue&nbsp;(RGB)&nbsp;value.&nbsp;Take&nbsp;an&nbsp;eight&nbsp;bit&nbsp;display,&nbsp;for<br />example:&nbsp;eight&nbsp;bits&nbsp;are&nbsp;not&nbsp;enough&nbsp;to&nbsp;encode&nbsp;a&nbsp;color&nbsp;in-place;&nbsp;only&nbsp;a&nbsp;few<br />arbitrary&nbsp;RGB&nbsp;values&nbsp;would&nbsp;be&nbsp;possible.&nbsp;Instead,&nbsp;the&nbsp;bits&nbsp;are&nbsp;interpreted<br />as&nbsp;an&nbsp;integer&nbsp;and&nbsp;used&nbsp;to&nbsp;index&nbsp;an&nbsp;array&nbsp;of&nbsp;RGB&nbsp;color&nbsp;values.&nbsp;This&nbsp;table<br />of&nbsp;colors&nbsp;is&nbsp;called&nbsp;the&nbsp;colormap.<br /><br />A&nbsp;visual&nbsp;is&nbsp;required&nbsp;to&nbsp;determine&nbsp;how&nbsp;a&nbsp;pixel's&nbsp;bit&nbsp;pattern&nbsp;is&nbsp;converted&nbsp;into<br />a&nbsp;visible&nbsp;color.&nbsp;On&nbsp;an&nbsp;8-bit&nbsp;display,&nbsp;the&nbsp;X&nbsp;server&nbsp;might&nbsp;interpret&nbsp;each&nbsp;pixel<br />as&nbsp;an&nbsp;index&nbsp;into&nbsp;a&nbsp;single&nbsp;colormap&nbsp;containing&nbsp;the&nbsp;256&nbsp;possible&nbsp;colors.&nbsp;24-bit<br />visuals&nbsp;typically&nbsp;have&nbsp;three&nbsp;colormaps:&nbsp;one&nbsp;for&nbsp;shades&nbsp;of&nbsp;red,&nbsp;one&nbsp;for&nbsp;shades<br />of&nbsp;green,&nbsp;and&nbsp;one&nbsp;for&nbsp;shades&nbsp;of&nbsp;blue.&nbsp;Each&nbsp;colormap&nbsp;is&nbsp;indexed&nbsp;with&nbsp;an<br />eight-bit&nbsp;value;&nbsp;the&nbsp;three&nbsp;eight-bit&nbsp;values&nbsp;are&nbsp;packed&nbsp;into&nbsp;a&nbsp;24-bit&nbsp;pixel.<br />The&nbsp;visual&nbsp;defines&nbsp;the&nbsp;meaning&nbsp;of&nbsp;the&nbsp;pixel&nbsp;contents.&nbsp;Visuals&nbsp;also&nbsp;define<br />whether&nbsp;the&nbsp;colormap&nbsp;is&nbsp;read-only&nbsp;or&nbsp;modifiable.<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GdkVisual<br /><br />Xlib&nbsp;can&nbsp;report&nbsp;a&nbsp;list&nbsp;of&nbsp;all&nbsp;available&nbsp;visuals&nbsp;and&nbsp;information&nbsp;about&nbsp;each;<br />GDK&nbsp;keeps&nbsp;a&nbsp;client-side&nbsp;copy&nbsp;of&nbsp;this&nbsp;information&nbsp;in&nbsp;a&nbsp;struct&nbsp;called&nbsp;GdkVisual.<br />GDK&nbsp;can&nbsp;report&nbsp;the&nbsp;available&nbsp;visuals,&nbsp;and&nbsp;rank&nbsp;them&nbsp;in&nbsp;different&nbsp;ways.&nbsp;Most<br />of&nbsp;the&nbsp;time&nbsp;you&nbsp;will&nbsp;only&nbsp;use&nbsp;gdk_visual_get_system(),&nbsp;which&nbsp;returns&nbsp;a&nbsp;pointer<br />to&nbsp;the&nbsp;default&nbsp;visual.<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color&nbsp;and&nbsp;GdkColormap<br /><br />struct&nbsp;GdkColor<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;gulong&nbsp;&nbsp;pixel;<br />&nbsp;&nbsp;&nbsp;&nbsp;gushort&nbsp;red;<br />&nbsp;&nbsp;&nbsp;&nbsp;gushort&nbsp;green;<br />&nbsp;&nbsp;&nbsp;&nbsp;gushort&nbsp;blue;<br />};<br /><br />A&nbsp;convenient&nbsp;way&nbsp;to&nbsp;obtain&nbsp;RGB&nbsp;values&nbsp;is&nbsp;the&nbsp;gdk_color_parse()&nbsp;function.&nbsp;This<br />takes&nbsp;an&nbsp;X&nbsp;color&nbsp;specification,&nbsp;and&nbsp;fills&nbsp;in&nbsp;the&nbsp;red,&nbsp;green,&nbsp;and&nbsp;blue&nbsp;fields<br />of&nbsp;a&nbsp;GdkColor.&nbsp;An&nbsp;X&nbsp;color&nbsp;specification&nbsp;can&nbsp;have&nbsp;many&nbsp;forms;&nbsp;one&nbsp;possibility<br />is&nbsp;an&nbsp;RGB&nbsp;string:<br />&nbsp;&nbsp;&nbsp;&nbsp;RGB:FF/FF/FF<br />Another&nbsp;form:<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&ltgdk/gdk.h&gt<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkColor&nbsp;color;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(gdk_color_parse(&quot;orange&quot;,&nbsp;&color))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(gdk_colormap_alloc_color(colormap,&nbsp;&color,&nbsp;FALSE,&nbsp;FALSE))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;We&nbsp;have&nbsp;orange!&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obtaining&nbsp;a&nbsp;Colormap<br /><br />Call&nbsp;gdk_colormap_get_system()&nbsp;to&nbsp;get&nbsp;the&nbsp;default&nbsp;colormap.<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GdkPixbuf&nbsp;and&nbsp;GdkPixmap<br /><br />GdkPixbuf&nbsp;is&nbsp;used&nbsp;to&nbsp;represent&nbsp;images.&nbsp;It&nbsp;contains&nbsp;information&nbsp;about&nbsp;the<br />image's&nbsp;pixel&nbsp;data,&nbsp;its&nbsp;color&nbsp;space,&nbsp;bits&nbsp;per&nbsp;sample,&nbsp;width,&nbsp;height,&nbsp;etc.<br /><br />A&nbsp;GdkPixbuf&nbsp;is&nbsp;stored&nbsp;on&nbsp;the&nbsp;client,&nbsp;and&nbsp;a&nbsp;Pixmap&nbsp;on&nbsp;the&nbsp;server.<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drawing<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Points<br />gdk_draw_point&nbsp;<br />gdk_draw_points<br />&nbsp;&nbsp;&nbsp;&nbsp;Lines<br />gdk_draw_line&nbsp;<br />gdk_draw_lines&nbsp;<br />gdk_draw_segments&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Rectangles<br />gdk_draw_rectangle<br />&nbsp;&nbsp;&nbsp;&nbsp;Arcs<br />gdk_draw_arc<br />&nbsp;&nbsp;&nbsp;&nbsp;Polygons<br />gdk_draw_polygon<br />&nbsp;&nbsp;&nbsp;&nbsp;Text<br />gdk_draw_layout<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGB&nbsp;Buffers<br /><br />GDK's&nbsp;GdkRGB&nbsp;module&nbsp;allows&nbsp;you&nbsp;to&nbsp;copy&nbsp;a&nbsp;client-side&nbsp;buffer&nbsp;of&nbsp;image&nbsp;data&nbsp;to<br />a&nbsp;drawable.&nbsp;You&nbsp;can't&nbsp;directly&nbsp;manipulate&nbsp;a&nbsp;GdkPixmap&nbsp;because&nbsp;a&nbsp;pixmap&nbsp;is&nbsp;a<br />server-side&nbsp;object.<br />Internally,&nbsp;GdkRGB&nbsp;uses&nbsp;an&nbsp;object&nbsp;called&nbsp;GdkImage&nbsp;to&nbsp;rapidly&nbsp;copy&nbsp;image&nbsp;data<br />to&nbsp;the&nbsp;server&nbsp;in&nbsp;a&nbsp;single&nbsp;request.<br />Before&nbsp;using&nbsp;any&nbsp;GdkRGB&nbsp;functions,&nbsp;you&nbsp;must&nbsp;initialize&nbsp;the&nbsp;module&nbsp;with<br />gdk_rgb_init()&nbsp;this&nbsp;sets&nbsp;up&nbsp;the&nbsp;visual&nbsp;and&nbsp;colormap&nbsp;GdkRGB&nbsp;will&nbsp;use,<br />and&nbsp;some&nbsp;internal&nbsp;data&nbsp;structures.<br />The&nbsp;drawable&nbsp;you&nbsp;intend&nbsp;to&nbsp;copy&nbsp;the&nbsp;RGB&nbsp;buffer&nbsp;to&nbsp;must&nbsp;use&nbsp;GdkRGB's&nbsp;visual<br />and&nbsp;colormap.&nbsp;If&nbsp;the&nbsp;drawable&nbsp;is&nbsp;a&nbsp;part&nbsp;of&nbsp;a&nbsp;widget,&nbsp;the&nbsp;easiest&nbsp;way&nbsp;to&nbsp;ensure<br />this&nbsp;is&nbsp;to&nbsp;push&nbsp;the&nbsp;GdkRGB&nbsp;visual&nbsp;and&nbsp;colormap&nbsp;when&nbsp;you&nbsp;create&nbsp;the&nbsp;widget:<br /><br />GtkWidget*&nbsp;widget;<br />gtk_widget_push_colormap&nbsp;(gdk_rgb_get_cmap());<br />widget&nbsp;=&nbsp;gtk_whatever_new&nbsp;();<br />gtk_widget_pop_colormap();<br /><br />GdkRGB&nbsp;understands&nbsp;several&nbsp;kinds&nbsp;of&nbsp;image&nbsp;data.&nbsp;The&nbsp;simplest&nbsp;is&nbsp;24-bit&nbsp;RGB<br />data;&nbsp;this&nbsp;kind&nbsp;of&nbsp;buffer&nbsp;is&nbsp;rendered&nbsp;with&nbsp;gdk_draw_rgb_image().<br /><br />A&nbsp;24-bit&nbsp;RGB&nbsp;buffer&nbsp;is&nbsp;a&nbsp;one-dimensional&nbsp;array&nbsp;of&nbsp;bytes;&nbsp;every&nbsp;byte&nbsp;triplet<br />makes&nbsp;up&nbsp;a&nbsp;pixel&nbsp;(byte&nbsp;0&nbsp;is&nbsp;red,&nbsp;byte&nbsp;1&nbsp;is&nbsp;green,&nbsp;byte&nbsp;2&nbsp;is&nbsp;blue).&nbsp;Three<br />numbers&nbsp;describe&nbsp;the&nbsp;size&nbsp;of&nbsp;the&nbsp;array&nbsp;and&nbsp;the&nbsp;location&nbsp;of&nbsp;bytes&nbsp;within&nbsp;it:<br />The&nbsp;width&nbsp;is&nbsp;the&nbsp;number&nbsp;of&nbsp;pixels&nbsp;(byte&nbsp;triplets)&nbsp;per&nbsp;row&nbsp;of&nbsp;the&nbsp;image.<br />The&nbsp;height&nbsp;is&nbsp;the&nbsp;number&nbsp;of&nbsp;rows&nbsp;in&nbsp;the&nbsp;image.<br />The&nbsp;x,y,width,height&nbsp;arguments&nbsp;to&nbsp;gdk_rgb_draw_image()&nbsp;define&nbsp;a&nbsp;region&nbsp;of<br />the&nbsp;target&nbsp;drawable&nbsp;to&nbsp;copy&nbsp;the&nbsp;RGB&nbsp;buffer&nbsp;to.&nbsp;The&nbsp;RGB&nbsp;buffer&nbsp;must&nbsp;have&nbsp;at<br />least&nbsp;width&nbsp;columns&nbsp;and&nbsp;height&nbsp;rows.&nbsp;Row&nbsp;0,&nbsp;column&nbsp;0&nbsp;of&nbsp;the&nbsp;RGB&nbsp;buffer&nbsp;will<br />be&nbsp;copied&nbsp;to&nbsp;point&nbsp;(x,y)&nbsp;on&nbsp;the&nbsp;drawable.<br /><br />#include&nbsp;&ltgdk/gdk.h&gt<br />void&nbsp;gdk_rgb_init(void);<br />GdkVisual*&nbsp;gdk_rgb_get_visual(void);<br />void&nbsp;gdk_draw_rgb_image&nbsp;(GdkDrawable&nbsp;*drawable,&nbsp;GdkGC&nbsp;*gc,&nbsp;gint&nbsp;x,&nbsp;gint&nbsp;y,<br />&nbsp;&nbsp;&nbsp;&nbsp;gint&nbsp;width,&nbsp;gint&nbsp;height,&nbsp;GdkRgbDither&nbsp;dith,&nbsp;guchar&nbsp;*rgb_buf,<br />&nbsp;&nbsp;&nbsp;&nbsp;gint&nbsp;rowstride);<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Events<br /><br />Events&nbsp;are&nbsp;sent&nbsp;to&nbsp;your&nbsp;application&nbsp;to&nbsp;indicate&nbsp;changes&nbsp;in&nbsp;a&nbsp;GdkWindow&nbsp;or&nbsp;user<br />actions&nbsp;you&nbsp;might&nbsp;be&nbsp;interested&nbsp;in.&nbsp;All&nbsp;events&nbsp;are&nbsp;associated&nbsp;with&nbsp;a&nbsp;GdkWindow.<br />They&nbsp;also&nbsp;come&nbsp;to&nbsp;be&nbsp;associated&nbsp;with&nbsp;a&nbsp;GtkWidget.<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Types&nbsp;of&nbsp;Event<br /><br />There&nbsp;are&nbsp;many&nbsp;kinds&nbsp;of&nbsp;events;&nbsp;the&nbsp;GdkEvent&nbsp;union&nbsp;can&nbsp;represent&nbsp;any&nbsp;of&nbsp;them.<br />A&nbsp;special&nbsp;event&nbsp;type,&nbsp;GdkEventAny,&nbsp;contains&nbsp;the&nbsp;three&nbsp;fields&nbsp;common&nbsp;to&nbsp;all<br />events;&nbsp;any&nbsp;event&nbsp;can&nbsp;be&nbsp;cast&nbsp;to&nbsp;GdkEventAny.&nbsp;The&nbsp;first&nbsp;field&nbsp;in&nbsp;GdkEventAny<br />is&nbsp;a&nbsp;type&nbsp;marker,&nbsp;GdkEventType;&nbsp;GdkEventType&nbsp;is&nbsp;also&nbsp;included&nbsp;in&nbsp;the&nbsp;GdkEvent<br />union.&nbsp;Confused&nbsp;yet?&nbsp;Seeing&nbsp;the&nbsp;code&nbsp;should&nbsp;help.&nbsp;Here&nbsp;is&nbsp;GdkEventAny:<br /><br />struct&nbsp;_GdkEventAny<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventType&nbsp;type;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkWindow&nbsp;*window;<br />&nbsp;&nbsp;&nbsp;&nbsp;gint8&nbsp;send_event;<br />};<br /><br />and&nbsp;GdkEvent:<br /><br />union&nbsp;_GdkEvent<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventType&nbsp;type;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventAny&nbsp;any;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventExpose&nbsp;expose;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventNoExpose&nbsp;no_expose;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventVisibility&nbsp;visibility;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventMotion&nbsp;motion;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventButton&nbsp;button;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventKey&nbsp;key;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventCrossing&nbsp;crossing;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventFocus&nbsp;focus_change;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventConfigure&nbsp;configure;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventProperty&nbsp;property;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventSelection&nbsp;selection;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventProximity&nbsp;proximity;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventClient&nbsp;client;<br />&nbsp;&nbsp;&nbsp;&nbsp;GdkEventDND&nbsp;dnd;<br />};<br /><br />The&nbsp;window&nbsp;field&nbsp;of&nbsp;GdkEventAny&nbsp;is&nbsp;the&nbsp;GdkWindow&nbsp;the&nbsp;event&nbsp;was&nbsp;sent&nbsp;to.<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;Event&nbsp;Mask<br /><br />Each&nbsp;GdkWindow&nbsp;has&nbsp;an&nbsp;associated&nbsp;event&nbsp;mask&nbsp;which&nbsp;determines&nbsp;which&nbsp;events&nbsp;on<br />that&nbsp;window&nbsp;the&nbsp;X&nbsp;server&nbsp;will&nbsp;forward&nbsp;to&nbsp;your&nbsp;application.&nbsp;You&nbsp;specify&nbsp;the<br />event&nbsp;mask&nbsp;when&nbsp;a&nbsp;GdkWindow&nbsp;is&nbsp;created,&nbsp;as&nbsp;part&nbsp;of&nbsp;the&nbsp;GdkWindowAttr&nbsp;struct.<br />You&nbsp;can&nbsp;access&nbsp;and&nbsp;change&nbsp;the&nbsp;event&nbsp;mask&nbsp;later&nbsp;using&nbsp;gdk_window_set_events()<br />and&nbsp;gdk_window_get_events().&nbsp;If&nbsp;the&nbsp;GdkWindow&nbsp;in&nbsp;question&nbsp;belongs&nbsp;to&nbsp;a&nbsp;widget,<br />you&nbsp;should&nbsp;not&nbsp;change&nbsp;the&nbsp;event&nbsp;mask&nbsp;directly;&nbsp;rather,&nbsp;call<br />gtk_widget_set_events()&nbsp;or&nbsp;gtk_widget_add_events().<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Receiving&nbsp;GDK&nbsp;Events&nbsp;in&nbsp;GTK+<br /><br />In&nbsp;a&nbsp;GTK+&nbsp;program,&nbsp;you&nbsp;will&nbsp;never&nbsp;receive&nbsp;GDK&nbsp;events&nbsp;directly.&nbsp;Instead,&nbsp;all<br />events&nbsp;are&nbsp;passed&nbsp;to&nbsp;a&nbsp;GtkWidget,&nbsp;which&nbsp;emits&nbsp;a&nbsp;corresponding&nbsp;signal.&nbsp;You<br />handle&nbsp;events&nbsp;by&nbsp;connecting&nbsp;handlers&nbsp;to&nbsp;GtkWidget&nbsp;signals.<br />In&nbsp;general,&nbsp;events&nbsp;go&nbsp;to&nbsp;the&nbsp;widget&nbsp;owning&nbsp;the&nbsp;GdkWindow&nbsp;the&nbsp;event&nbsp;occurred&nbsp;on.<br /><br />If&nbsp;the&nbsp;emission&nbsp;of&nbsp;an&nbsp;event&nbsp;signal&nbsp;returns&nbsp;TRUE,&nbsp;the&nbsp;GTK+&nbsp;main&nbsp;loop&nbsp;will&nbsp;stop<br />propagating&nbsp;the&nbsp;current&nbsp;event.&nbsp;If&nbsp;it&nbsp;returns&nbsp;FALSE,&nbsp;the&nbsp;main&nbsp;loop&nbsp;will<br />propagate&nbsp;the&nbsp;event&nbsp;to&nbsp;the&nbsp;widget's&nbsp;parent.<br /><br /><br /><br /><br /><br />

yyxl 发表于 2010-12-17 08:24

学习学习。。。。。。。。。。。。。

青山电子 发表于 2012-5-12 08:48

呵呵,学习中
页: [1]
查看完整版本: GDK的一点总结(不完全)