⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sec-gdkevent.html

📁 gtk 开发手册和参考文档。 包括gtk glib gdk等
💻 HTML
📖 第 1 页 / 共 5 页
字号:
            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_KEY_RELEASE_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_KEY_RELEASE</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_ENTER_NOTIFY_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_ENTER_NOTIFY</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_LEAVE_NOTIFY_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_LEAVE_NOTIFY</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_FOCUS_CHANGE_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_FOCUS_IN</span>, <span                class="STRUCTNAME">GDK_FOCUS_OUT</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_STRUCTURE_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_CONFIGURE</span>,                <span class="STRUCTNAME">GDK_DESTROY</span>, <span                class="STRUCTNAME">GDK_MAP</span>, <span class=                 "STRUCTNAME">GDK_UNMAP</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_PROPERTY_CHANGE_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_PROPERTY_NOTIFY</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_VISIBILITY_NOTIFY_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_VISIBILITY_NOTIFY</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_PROXIMITY_IN_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_PROXIMITY_IN</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_PROXIMITY_OUT_MASK</span>              </td>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_PROXIMITY_OUT</span>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">                GDK_SUBSTRUCTURE_MASK</span>              </td>              <td align="LEFT" valign="TOP">                Receive <span class="STRUCTNAME">                GDK_STRUCTURE_MASK</span> events for <i class=                 "EMPHASIS">child windows</i>              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_ALL_EVENTS_MASK</span>              </td>              <td align="LEFT" valign="TOP">                All events              </td>            </tr>          </table>        </div>      </div>      <div class="SECT2">        <h2 class="SECT2">          <a name="SEC-GTKEVENTS">Receiving GDK Events in GTK+</a>        </h2>        <p>          In a GTK+ program, you will never receive GDK events          directly. Instead, all events are passed to a <tt class=           "CLASSNAME">GtkWidget</tt>, which emits a corresponding          signal. You handle events by connecting handlers to <tt          class="CLASSNAME">GtkWidget</tt> signals.        </p>        <p>          The X server sends each X client a stream of events.          Events are sent and received in the order of their          occurrence. GDK converts each <span class="STRUCTNAME">          XEvent</span> it receives into a <span class=          "STRUCTNAME">GdkEvent</span>, then places events in a          queue. GTK+ monitors GDK's event queue; for each event          received, it decides which widget (if any) should receive          the event. The <tt class="CLASSNAME">GtkWidget</tt> base          class defines signals for most event types (such as <span          class="SYMBOL">"button_press_event"</span>); it also          defines a generic <span class="SYMBOL">"event"</span>          signal. The GTK+ main loop calls <tt class="FUNCTION">          gtk_widget_event()</tt> to deliver an event to a widget;          this function first emits the <span class="SYMBOL">          "event"</span> signal, then emits a signal for the          specific event type (if appropriate). Some events are          handled in special ways; notably, drag-and-drop events do          not directly correspond to drag-and-drop signals.        </p>        <p>          In general, events go to the widget owning the <span          class="STRUCTNAME">GdkWindow</span> the event occurred          on. However, there are certain special cases.        </p>        <p>          if a widget has the grab (i.e., if <tt class="FUNCTION">          gtk_grab_add()</tt> was called, see <a href=           "z57.html#SEC-GRABS">the section called <i>Grabs</i> in          the chapter called <i>GTK+ Basics</i></a>), certain          events will only be forwarded to the widget with the          grab, or the children of that widget. Events that occur          on other widgets are ignored. Only certain user-initiated          events such as button events and key events are affected          by a grab.        </p>        <p>          Widget sensitivity (see <a href=          "z57.html#SEC-SENSITIVITY">the section called <i>          Sensitivity</i> in the chapter called <i>GTK+          Basics</i></a>) also affects where events are sent.          Events representing user interaction are not forwarded to          insensitive widgets.        </p>        <p>          As you might expect, widgets with no associated <span          class="STRUCTNAME">GdkWindow</span> do not originate          events; X only sends events to windows. There is one          exception: containers synthesize expose events for their          windowless children.        </p>        <p>          The GTK+ main loop <i class="EMPHASIS">propagates</i>          certain events from child widgets to their parent          containers. That is, for each event, a signal is emitted          first from a child widget, then from its immediate          parent, then from the parent's parent, and so on. For          example, if you click a <tt class="CLASSNAME">          GtkMenuItem</tt>, it ignores the button press and lets          the menu it's a part of handle it. Some events are not          propagated; <a href="sec-gdkevent.html#TAB-WIDGETEVENTS">          Table 4</a> gives details.        </p>        <p>          Event propagation ends once a widget "handles" the event.          This ensures that only one user-visible change results          from any user action. Handlers for <tt class="CLASSNAME">          GtkWidget</tt>'s event signals must return a <span class=           "STRUCTNAME">gint</span> value. Recall that the last          signal handler to run determines the return value of a          signal emission---see <a href="z109.html#SEC-EMITTING">          the section called <i>Emitting A Signal</i> in the          chapter called <i>The GTK+ Object and Type          System</i></a>. All event signals are <span class=           "STRUCTNAME">GTK_RUN_LAST</span>, so the return value          will come from:        </p>        <ul>          <li>            <p>              The last handler connected with <tt class="FUNCTION">              gtk_signal_connect_after()</tt>, if any.&#13;            </p>          </li>          <li>            <p>              Otherwise, the widget's default signal handler, if              any.&#13;            </p>          </li>          <li>            <p>              Otherwise, the last handler connected with <tt class=               "FUNCTION">gtk_signal_connect()</tt>, if any.&#13;            </p>          </li>          <li>            <p>              Otherwise, the default return value is <span class=               "STRUCTNAME">FALSE</span>.&#13;            </p>          </li>        </ul>        <p>          If the emission of an event signal returns <span class=           "STRUCTNAME">TRUE</span>, the GTK+ main loop will stop          propagating the current event. If it returns <span class=           "STRUCTNAME">FALSE</span>, the main loop will propagate          the event to the widget's parent. Recall that each event          results in two signal emissions: a generic <span class=           "SYMBOL">"event"</span> signal and a specific signal          (such as <span class="SYMBOL">"button_press_event"</span>          or <span class="SYMBOL">"key_press_event"</span>). If <i          class="EMPHASIS">either</i> emission returns <span class=           "STRUCTNAME">TRUE</span>, event propagation ends. The          return value from the generic <span class="SYMBOL">          "event"</span> signal has one additional effect: if <span          class="STRUCTNAME">TRUE</span>, the second, more specific          signal will not be emitted.        </p>        <p>          <a href="sec-gdkevent.html#TAB-WIDGETEVENTS">Table 4</a>          summarizes how <tt class="CLASSNAME">GtkWidget</tt>          signals correspond to event types, which events are          affected by an active grab, and which events are          propagated from parent to child. Signal handlers for all          event signals should return a <span class="STRUCTNAME">          gint</span> and take three arguments: the widget emitting          the signal, the event which triggered the signal, and a          user data pointer.        </p>        <div class="TABLE">          <a name="TAB-WIDGETEVENTS"></a>          <p>            <b>Table 4. <tt class="CLASSNAME">GtkWidget</tt>            Events</b>          </p>          <table border="1" bgcolor="#E0E0E0" cellspacing="0"          cellpadding="4" class="CALSTABLE">            <tr>              <th align="LEFT" valign="TOP">                Event Type              </th>              <th align="LEFT" valign="TOP">                <tt class="CLASSNAME">GtkWidget</tt> Signal              </th>              <th align="LEFT" valign="TOP">                Propagated?              </th>              <th align="LEFT" valign="TOP">                Grabbed?              </th>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_DELETE</span>              </td>              <td align="LEFT" valign="TOP">                <span class="SYMBOL">"delete_event"</span>              </td>              <td align="LEFT" valign="TOP">                No              </td>              <td align="LEFT" valign="TOP">                No              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_DESTROY</span>              </td>              <td align="LEFT" valign="TOP">                <span class="SYMBOL">"destroy_event"</span>              </td>              <td align="LEFT" valign="TOP">                No              </td>              <td align="LEFT" valign="TOP">                No              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_EXPOSE</span>              </td>              <td align="LEFT" valign="TOP">                <span class="SYMBOL">"expose_event"</span>              </td>              <td align="LEFT" valign="TOP">                No              </td>              <td align="LEFT" valign="TOP">                No              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_MOTION_NOTIFY</span>              </td>              <td align="LEFT" valign="TOP">                <span class="SYMBOL">"motion_notify_event"</span>              </td>              <td align="LEFT" valign="TOP">                Yes              </td>              <td align="LEFT" valign="TOP">                Yes              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_BUTTON_PRESS</span>              </td>              <td align="LEFT" valign="TOP">                <span class="SYMBOL">"button_press_event"</span>              </td>              <td align="LEFT" valign="TOP">                Yes              </td>              <td align="LEFT" valign="TOP">                Yes              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_2BUTTON_PRESS</span>              </td>              <td align="LEFT" valign="TOP">                <span class="SYMBOL">"button_press_event"</span>              </td>              <td align="LEFT" valign="TOP">                Yes              </td>              <td align="LEFT" valign="TOP">                Yes              </td>            </tr>            <tr>              <td align="LEFT" valign="TOP">                <span class="STRUCTNAME">GDK_3BUTTON_PRESS</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -