📄 a2711.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><HTML><HEAD><TITLE>GDK 事件类型</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="GTK+ 2.0 教程"HREF="book1.html"><LINKREL="PREVIOUS"TITLE="GtkAdjustment"HREF="x2708.html"><LINKREL="NEXT"TITLE="示例程序代码"HREF="a2845.html"></HEAD><BODYCLASS="APPENDIX"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">GTK+ 2.0 教程</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="x2708.html"ACCESSKEY="P"><<< Previous</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom"></TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="a2845.html"ACCESSKEY="N">Next >>></A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="APPENDIX"><H1><ANAME="APP-GDKEVENTTYPES">GDK 事件类型</H1><P>下列的数据类型被 GTK+ 传递给事件处理函数。列出每种数据类型同时也列出了使用该类型的信号。</P><P></P><UL><LI><P> GdkEvent</P><P></P><UL><LI><P>drag_end_event</P></LI></UL></LI><LI><P> GdkEventType</P></LI><LI><P> GdkEventAny</P><P></P><UL><LI><P>delete_event</P></LI><LI><P>destroy_event</P></LI><LI><P>map_event</P></LI><LI><P>unmap_event</P></LI><LI><P>no_expose_event</P></LI></UL></LI><LI><P> GdkEventExpose</P><P></P><UL><LI><P>expose_event</P></LI></UL></LI><LI><P> GdkEventNoExpose</P></LI><LI><P> GdkEventVisibility</P></LI><LI><P> GdkEventMotion</P><P></P><UL><LI><P>motion_notify_event</P></LI></UL></LI><LI><P> GdkEventButton</P><P></P><UL><LI><P>button_press_event</P></LI><LI><P>button_release_event</P></LI></UL></LI><LI><P> GdkEventKey</P><P></P><UL><LI><P>key_press_event</P></LI><LI><P>key_release_event</P></LI></UL></LI><LI><P> GdkEventCrossing</P><P></P><UL><LI><P>enter_notify_event</P></LI><LI><P>leave_notify_event</P></LI></UL></LI><LI><P> GdkEventFocus</P><P></P><UL><LI><P>focus_in_event</P></LI><LI><P>focus_out_event</P></LI></UL></LI><LI><P> GdkEventConfigure</P><P></P><UL><LI><P>configure_event</P></LI></UL></LI><LI><P> GdkEventProperty</P><P></P><UL><LI><P>property_notify_event</P></LI></UL></LI><LI><P> GdkEventSelection</P><P></P><UL><LI><P>selection_clear_event</P></LI><LI><P>selection_request_event</P></LI><LI><P>selection_notify_event</P></LI></UL></LI><LI><P> GdkEventProximity</P><P></P><UL><LI><P>proximity_in_event</P></LI><LI><P>proximity_out_event</P></LI></UL></LI><LI><P> GdkEventDragBegin</P><P></P><UL><LI><P>drag_begin_event</P></LI></UL></LI><LI><P> GdkEventDragRequest</P><P></P><UL><LI><P>drag_request_event</P></LI></UL></LI><LI><P> GdkEventDropEnter</P><P></P><UL><LI><P>drop_enter_event</P></LI></UL></LI><LI><P> GdkEventDropLeave</P><P></P><UL><LI><P>drop_leave_event</P></LI></UL></LI><LI><P> GdkEventDropDataAvailable</P><P></P><UL><LI><P>drop_data_available_event</P></LI></UL></LI><LI><P> GdkEventClient</P><P></P><UL><LI><P>client_event</P></LI></UL></LI><LI><P> GdkEventOther</P><P></P><UL><LI><P>other_event</P></LI></UL></LI></UL><P>数据类型<TTCLASS="LITERAL">GdkEventType</TT>是一个特殊的数据类型,它被其余的数据类型使用,作为一个传递给信号处理函数的数据类型指示器。在下面你会看到,每个事件数据结构有一个该类型的成员。它是如下的枚举值:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">typedef enum{ GDK_NOTHING = -1, GDK_DELETE = 0, GDK_DESTROY = 1, GDK_EXPOSE = 2, GDK_MOTION_NOTIFY = 3, GDK_BUTTON_PRESS = 4, GDK_2BUTTON_PRESS = 5, GDK_3BUTTON_PRESS = 6, GDK_BUTTON_RELEASE = 7, GDK_KEY_PRESS = 8, GDK_KEY_RELEASE = 9, GDK_ENTER_NOTIFY = 10, GDK_LEAVE_NOTIFY = 11, GDK_FOCUS_CHANGE = 12, GDK_CONFIGURE = 13, GDK_MAP = 14, GDK_UNMAP = 15, GDK_PROPERTY_NOTIFY = 16, GDK_SELECTION_CLEAR = 17, GDK_SELECTION_REQUEST = 18, GDK_SELECTION_NOTIFY = 19, GDK_PROXIMITY_IN = 20, GDK_PROXIMITY_OUT = 21, GDK_DRAG_BEGIN = 22, GDK_DRAG_REQUEST = 23, GDK_DROP_ENTER = 24, GDK_DROP_LEAVE = 25, GDK_DROP_DATA_AVAIL = 26, GDK_CLIENT_EVENT = 27, GDK_VISIBILITY_NOTIFY = 28, GDK_NO_EXPOSE = 29, GDK_OTHER_EVENT = 9999 /* 不赞成使用,用过虑器代替 */} GdkEventType;</PRE></TD></TR></TABLE><P>剩下的,与其余事件类型不同的是<TTCLASS="LITERAL">GdkEvent</TT>。它是所有其余数据类型的统一,允许在一个信号处理函数中转换为指定的事件数据类型。</P><P>因此,事件类型有如下定义:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">struct _GdkEventAny{ GdkEventType type; GdkWindow *window; gint8 send_event;};struct _GdkEventExpose{ GdkEventType type; GdkWindow *window; gint8 send_event; GdkRectangle area; gint count; /* 如果非零,它是跟随事件的数目。*/};struct _GdkEventNoExpose{ GdkEventType type; GdkWindow *window; gint8 send_event; /* XXX: 有人需要X major_code或minor_code域吗?*/};struct _GdkEventVisibility{ GdkEventType type; GdkWindow *window; gint8 send_event; GdkVisibilityState state;};struct _GdkEventMotion{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 time; gdouble x; gdouble y; gdouble pressure; gdouble xtilt; gdouble ytilt; guint state; gint16 is_hint; GdkInputSource source; guint32 deviceid; gdouble x_root, y_root;};struct _GdkEventButton{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 time; gdouble x; gdouble y; gdouble pressure; gdouble xtilt; gdouble ytilt; guint state; guint button; GdkInputSource source; guint32 deviceid; gdouble x_root, y_root;};struct _GdkEventKey{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 time; guint state; guint keyval; gint length; gchar *string;};struct _GdkEventCrossing{ GdkEventType type; GdkWindow *window; gint8 send_event; GdkWindow *subwindow; GdkNotifyType detail;};struct _GdkEventFocus{ GdkEventType type; GdkWindow *window; gint8 send_event; gint16 in;};struct _GdkEventConfigure{ GdkEventType type; GdkWindow *window; gint8 send_event; gint16 x, y; gint16 width; gint16 height;};struct _GdkEventProperty{ GdkEventType type; GdkWindow *window; gint8 send_event; GdkAtom atom; guint32 time; guint state;};struct _GdkEventSelection{ GdkEventType type; GdkWindow *window; gint8 send_event; GdkAtom selection; GdkAtom target; GdkAtom property; guint32 requestor; guint32 time;};/* 这个事件数据类型很少用。它在支持XInput的程序中,用于绘制自己的光标 */struct _GdkEventProximity{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 time; GdkInputSource source; guint32 deviceid;};struct _GdkEventDragRequest{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 requestor; union { struct { guint protocol_version:4; guint sendreply:1; guint willaccept:1; guint delete_data:1; guint senddata:1; guint reserved:22; } flags; glong allflags; } u; guint8 isdrop; /* 几个 X 事件能产生这个gdk事件---这让应用程序知道拖放是否真的发生 或我们仅仅设置数据 */ GdkPoint drop_coords; gchar *data_type; guint32 timestamp;};struct _GdkEventDragBegin{ GdkEventType type; GdkWindow *window; gint8 send_event; union { struct { guint protocol_version:4; guint reserved:28; } flags; glong allflags; } u;};struct _GdkEventDropEnter{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 requestor; union { struct { guint protocol_version:4; guint sendreply:1; guint extended_typelist:1; guint reserved:26; } flags; glong allflags; } u;};struct _GdkEventDropLeave{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 requestor; union { struct { guint protocol_version:4; guint reserved:28; } flags; glong allflags; } u;};struct _GdkEventDropDataAvailable{ GdkEventType type; GdkWindow *window; gint8 send_event; guint32 requestor; union { struct { guint protocol_version:4; guint isdrop:1; guint reserved:25; } flags; glong allflags; } u; gchar *data_type; /* MIME类型 */ gulong data_numbytes; gpointer data; guint32 timestamp; GdkPoint coords;};struct _GdkEventClient{ GdkEventType type; GdkWindow *window; gint8 send_event; GdkAtom message_type; gushort data_format; union { char b[20]; short s[10]; long l[5]; } data;};struct _GdkEventOther{ GdkEventType type; GdkWindow *window; gint8 send_event; GdkXEvent *xevent;};</PRE></TD></TR></TABLE></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="x2708.html"ACCESSKEY="P"><<< Previous</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="book1.html"ACCESSKEY="H">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="a2845.html"ACCESSKEY="N">Next >>></A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">GtkAdjustment</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"> </TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">示例程序代码</TD></TR></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -