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

📄 gtk_tut-18.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>GTK v1.2 Tutorial: Advanced Event and Signal Handling</TITLE> <LINK HREF="gtk_tut-19.html" REL=next> <LINK HREF="gtk_tut-17.html" REL=previous> <LINK HREF="gtk_tut.html#toc18" REL=contents></HEAD><BODY BGCOLOR="#FFFFFF"><A HREF="gtk_tut-19.html">Next</A><A HREF="gtk_tut-17.html">Previous</A><A HREF="gtk_tut.html#toc18">Contents</A><HR NOSHADE><H2><A NAME="sec_Adv_Events_and_Signals"></A> <A NAME="s18">18. Advanced Event and Signal Handling</A></H2><H2><A NAME="ss18.1">18.1 Signal Functions</A></H2><H3>Connecting and Disconnecting Signal Handlers</H3><P><P><BLOCKQUOTE><CODE><PRE>guint gtk_signal_connect( GtkObject     *object,                          const gchar   *name,                          GtkSignalFunc  func,                          gpointer       func_data );guint gtk_signal_connect_after( GtkObject     *object,                                const gchar   *name,                                GtkSignalFunc  func,                                gpointer       func_data );guint gtk_signal_connect_object( GtkObject     *object,                                 const gchar   *name,                                 GtkSignalFunc  func,                                 GtkObject     *slot_object );guint gtk_signal_connect_object_after( GtkObject     *object,                                       const gchar   *name,                                       GtkSignalFunc  func,                                       GtkObject     *slot_object );guint gtk_signal_connect_full( GtkObject          *object,                               const gchar        *name,                               GtkSignalFunc       func,                               GtkCallbackMarshal  marshal,                               gpointer            data,                               GtkDestroyNotify    destroy_func,                               gint                object_signal,                               gint                after );guint gtk_signal_connect_interp( GtkObject          *object,                                 const gchar        *name,                                 GtkCallbackMarshal  func,                                 gpointer            data,                                 GtkDestroyNotify    destroy_func,                                 gint                after );void gtk_signal_connect_object_while_alive( GtkObject     *object,                                            const gchar   *signal,                                            GtkSignalFunc  func,                                            GtkObject     *alive_object );void gtk_signal_connect_while_alive( GtkObject     *object,                                     const gchar   *signal,                                     GtkSignalFunc  func,                                     gpointer       func_data,                                     GtkObject     *alive_object );void gtk_signal_disconnect( GtkObject *object,                            guint      handler_id );void gtk_signal_disconnect_by_func( GtkObject     *object,                                    GtkSignalFunc  func,                                    gpointer       data );</PRE></CODE></BLOCKQUOTE><P><H3>Blocking and Unblocking Signal Handlers</H3><P><BLOCKQUOTE><CODE><PRE>void gtk_signal_handler_block( GtkObject *object,                               guint      handler_id);void gtk_signal_handler_block_by_func( GtkObject     *object,                                       GtkSignalFunc  func,                                       gpointer       data );void gtk_signal_handler_block_by_data( GtkObject *object,                                       gpointer   data );void gtk_signal_handler_unblock( GtkObject *object,                                 guint      handler_id );void gtk_signal_handler_unblock_by_func( GtkObject     *object,                                         GtkSignalFunc  func,                                         gpointer       data );void gtk_signal_handler_unblock_by_data( GtkObject *object,                                         gpointer   data );</PRE></CODE></BLOCKQUOTE><P><H3>Emitting and Stopping Signals</H3><P><BLOCKQUOTE><CODE><PRE>void gtk_signal_emit( GtkObject *object,                      guint      signal_id,                      ... );void gtk_signal_emit_by_name( GtkObject   *object,                              const gchar *name,                              ... );void gtk_signal_emitv( GtkObject *object,                       guint      signal_id,                       GtkArg    *params );void gtk_signal_emitv_by_name( GtkObject   *object,                               const gchar *name,                               GtkArg      *params );guint gtk_signal_n_emissions( GtkObject *object,                              guint      signal_id );guint gtk_signal_n_emissions_by_name( GtkObject   *object,                                      const gchar *name );void gtk_signal_emit_stop( GtkObject *object,                           guint      signal_id );void gtk_signal_emit_stop_by_name( GtkObject   *object,                                   const gchar *name );</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss18.2">18.2 Signal Emission and Propagation</A></H2><P>Signal emission is the process wherby GTK runs all handlers for aspecific object and signal.<P>First, note that the return value from a signal emission is the returnvalue of the <EM>last</EM> handler executed. Since event signals areall of type GTK_RUN_LAST, this will be the default (GTK supplied)default handler, unless you connect with gtk_signal_connect_after().<P>The way an event (say GTK_BUTTON_PRESS) is handled, is:<UL><LI>Start with the widget where the event occured.</LI><LI>Emit the generic "event" signal. If that signal handler returnsa value of TRUE, stop all processing.</LI><LI>Otherwise, emit a specific, "button_press_event" signal. If thatreturns TRUE, stop all processing.</LI><LI>Otherwise, go to the widget's parent, and repeat the above steps.</LI><LI>Contimue until some signal handler returns TRUE, or until thetop-level widget is reached.</LI></UL><P>Some consequences of the above are:<UL><LI>Your handler's return value will have no effect if there is adefault handler, unless you connect with gtk_signal_connect_after().</LI><LI>To prevent the default handler from being run, you need toconnect with gtk_signal_connect() and usegtk_signal_emit_stop_by_name() - the return value only affects whetherthe signal is propagated, not the current emission.</LI></UL><P><HR NOSHADE><A HREF="gtk_tut-19.html">Next</A><A HREF="gtk_tut-17.html">Previous</A><A HREF="gtk_tut.html#toc18">Contents</A></BODY></HTML>

⌨️ 快捷键说明

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