?? sec-gdkevent.html
字號:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html> <head> <title> Events </title> <meta name="GENERATOR" content= "Modular DocBook HTML Stylesheet Version 1.45"> <link rel="HOME" title="GTK+ / Gnome Application Development" href="ggad.html"> <link rel="UP" title="GDK Basics" href="cha-gdk.html"> <link rel="PREVIOUS" title="Drawables and Pixmaps" href= "sec-gdkdrawable.html"> <link rel="NEXT" title="The Mouse Pointer" href= "sec-gdkcursor.html"> </head> <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink= "#840084" alink="#0000FF"> <div class="NAVHEADER"> <table width="100%" border="0" bgcolor="#ffffff" cellpadding= "1" cellspacing="0"> <tr> <th colspan="4" align="center"> <font color="#000000" size="2">GTK+ / Gnome Application Development</font> </th> </tr> <tr> <td width="25%" bgcolor="#ffffff" align="left"> <a href="sec-gdkdrawable.html"><font color="#0000ff" size="2"><b><<< Previous</b></font></a> </td> <td width="25%" colspan="2" bgcolor="#ffffff" align= "center"> <font color="#0000ff" size="2"><b><a href="ggad.html"> <font color="#0000ff" size="2"><b> Home</b></font></a></b></font> </td> <td width="25%" bgcolor="#ffffff" align="right"> <a href="sec-gdkcursor.html"><font color="#0000ff" size="2"><b>Next >>></b></font></a> </td> </tr> </table> </div> <div class="SECT1"> <h1 class="SECT1"> <a name="SEC-GDKEVENT">Events</a> </h1> <p> <i class="FIRSTTERM">Events</i> are sent to your application to indicate changes in a <span class= "STRUCTNAME">GdkWindow</span> or user actions you might be interested in. All events are associated with a <span class="STRUCTNAME">GdkWindow</span>. They also come to be associated with a <tt class="CLASSNAME">GtkWidget</tt>; the GTK+ main loop passes events from GDK to the GTK+ widget tree. </p> <div class="SECT2"> <h2 class="SECT2"> <a name="Z117">Types of Event</a> </h2> <p> There are many kinds of events; the <span class= "STRUCTNAME">GdkEvent</span> union can represent any of them. A special event type, <span class="STRUCTNAME"> GdkEventAny</span>, contains the three fields common to all events; any event can be cast to <span class= "STRUCTNAME">GdkEventAny</span>. The first field in <span class="STRUCTNAME">GdkEventAny</span> is a type marker, <span class="STRUCTNAME">GdkEventType</span>; <span class="STRUCTNAME">GdkEventType</span> is also included in the <span class="STRUCTNAME">GdkEvent</span> union. Confused yet? Seeing the code should help. Here is <span class="STRUCTNAME">GdkEventAny</span>: </p> <table border="0" bgcolor="#E0E0E0" width="100%"> <tr> <td><pre class="PROGRAMLISTING"> struct _GdkEventAny{ GdkEventType type; GdkWindow *window; gint8 send_event;}; </pre> </td> </tr> </table> <p> and <span class="STRUCTNAME">GdkEvent</span>: </p> <table border="0" bgcolor="#E0E0E0" width="100%"> <tr> <td><pre class="PROGRAMLISTING"> union _GdkEvent{ GdkEventType type; GdkEventAny any; GdkEventExpose expose; GdkEventNoExpose no_expose; GdkEventVisibility visibility; GdkEventMotion motion; GdkEventButton button; GdkEventKey key; GdkEventCrossing crossing; GdkEventFocus focus_change; GdkEventConfigure configure; GdkEventProperty property; GdkEventSelection selection; GdkEventProximity proximity; GdkEventClient client; GdkEventDND dnd;}; </pre> </td> </tr> </table> <p> Every event type has the three members of <span class= "STRUCTNAME">GdkEventAny</span> as its first three members. Thus, the <span class="STRUCTNAME">type</span> of an event can be referred to in many ways (assume a <span class="STRUCTNAME">GdkEvent*</span> called <span class="STRUCTNAME">event</span>): </p> <ul> <li> <p> <span class="STRUCTNAME">event->type</span> </p> </li> <li> <p> <span class="STRUCTNAME"> event->any.type</span> </p> </li> <li> <p> <span class="STRUCTNAME"> event->button.type</span> </p> </li> <li> <p> <span class="STRUCTNAME"> ((GdkEventAny*)event)->type</span> </p> </li> <li> <p> <span class="STRUCTNAME"> ((GdkEventButton*)event)->type</span> </p> </li> </ul> <p> You'll probably see all these in GTK+ source code. Of course, each event subtype has its own unique members; the <span class="STRUCTNAME">type</span> field tells you which subtype is valid. </p> <p> The <span class="STRUCTNAME">window</span> field of <span class="STRUCTNAME">GdkEventAny</span> is the <span class= "STRUCTNAME">GdkWindow</span> the event was sent to. If the <span class="STRUCTNAME">send_event</span> flag is <span class="STRUCTNAME">TRUE</span>, then the event was synthesized by another (or your own) application; if <span class="STRUCTNAME">FALSE</span>, it originated with the X server. GDK does not export the X interface for sending events (<tt class="FUNCTION">XSendEvent()</tt>). However, GTK+ often "makes up" an event by declaring a static event struct, filling it in, then emitting the event's corresponding widget signal. These synthesized events will have <span class="STRUCTNAME"> send_event</span> set to <span class="STRUCTNAME"> TRUE</span>. <a href="sec-gdkevent.html#SEC-GTKEVENTS"> the section called <i>Receiving GDK Events in GTK+</i></a> explains how GTK+ associates events with widget signals. </p> <p> There are more possible values for <span class= "STRUCTNAME">GdkEventType</span> than there are members in the <span class="STRUCTNAME">GdkEvent</span> union. Many event types share the same data; for example, <span class="STRUCTNAME">GDK_BUTTON_PRESS</span> and <span class="STRUCTNAME">GDK_BUTTON_RELEASE</span> both use the <span class="STRUCTNAME">button</span> member of <span class="STRUCTNAME">GdkEvent</span>, since the same information is conveyed when mouse buttons are pressed and released. <a href="sec-gdkevent.html#TAB-EVENTTYPE"> Table 2</a> shows all possible values of the <span class= "STRUCTNAME">GdkEventType</span> enumeration, and the corresponding <span class="STRUCTNAME">GdkEvent</span> member. The meaning of each event type is described later in this section. </p> <div class="TABLE"> <a name="TAB-EVENTTYPE"></a> <p> <b>Table 2. <span class="STRUCTNAME"> GdkEventType</span> Values</b> </p> <table border="1" bgcolor="#E0E0E0" cellspacing="0" cellpadding="4" class="CALSTABLE"> <tr> <th align="LEFT" valign="TOP"> Value </th> <th align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEvent</span> Member </th> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_NOTHING</span> </td> <td align="LEFT" valign="TOP"> none [PD] footnote! </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_DELETE</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventAny</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_DESTROY</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventAny</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_EXPOSE</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventExpose</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_MOTION_NOTIFY</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventMotion</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_BUTTON_PRESS</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventButton</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_2BUTTON_PRESS</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventButton</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_3BUTTON_PRESS</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventButton</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_BUTTON_RELEASE</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventButton</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_KEY_PRESS</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventKey</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_KEY_RELEASE</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventKey</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_ENTER_NOTIFY</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventCrossing</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_LEAVE_NOTIFY</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventCrossing</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_FOCUS_CHANGE</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventFocus</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_CONFIGURE</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventConfigure</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_MAP</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventAny</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_UNMAP</span> </td> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GdkEventAny</span> </td> </tr> <tr> <td align="LEFT" valign="TOP"> <span class="STRUCTNAME">GDK_PROPERTY_NOTIFY</span>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -