?? x245.html
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><HTML><HEAD><TITLE>事件</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="GTK+ 2.0 教程"HREF="book1.html"><LINKREL="UP"TITLE="從這里開(kāi)始"HREF="c103.html"><LINKREL="PREVIOUS"TITLE="信號(hào)和回調(diào)函數(shù)的原理"HREF="x223.html"><LINKREL="NEXT"TITLE="Hello World 詳解"HREF="x344.html"></HEAD><BODYCLASS="SECT1"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="x223.html"ACCESSKEY="P"><<< Previous</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">從這里開(kāi)始</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="x344.html"ACCESSKEY="N">Next >>></A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="SEC-EVENTS">事件</H1><P>除有前面描述的信號(hào)機(jī)制外,還有一套 <ICLASS="EMPHASIS">events</I> 反映 X 事件機(jī)制。回調(diào)函數(shù)可以與這些事件連接。這些事件是:</P><P></P><ULCOMPACT="COMPACT"><LI><SPAN> event</SPAN></LI><LI><SPAN> button_press_event</SPAN></LI><LI><SPAN> button_release_event</SPAN></LI><LI><SPAN> scroll_event</SPAN></LI><LI><SPAN> motion_notify_event</SPAN></LI><LI><SPAN> delete_event</SPAN></LI><LI><SPAN> destroy_event</SPAN></LI><LI><SPAN> expose_event</SPAN></LI><LI><SPAN> key_press_event</SPAN></LI><LI><SPAN> key_release_event</SPAN></LI><LI><SPAN> enter_notify_event</SPAN></LI><LI><SPAN> leave_notify_event</SPAN></LI><LI><SPAN> configure_event</SPAN></LI><LI><SPAN> focus_in_event</SPAN></LI><LI><SPAN> focus_out_event</SPAN></LI><LI><SPAN> map_event</SPAN></LI><LI><SPAN> unmap_event</SPAN></LI><LI><SPAN> property_notify_event</SPAN></LI><LI><SPAN> selection_clear_event</SPAN></LI><LI><SPAN> selection_request_event</SPAN></LI><LI><SPAN> selection_notify_event</SPAN></LI><LI><SPAN> proximity_in_event</SPAN></LI><LI><SPAN> proximity_out_event</SPAN></LI><LI><SPAN> visibility_notify_event</SPAN></LI><LI><SPAN> client_event</SPAN></LI><LI><SPAN> no_expose_event</SPAN></LI><LI><SPAN> window_state_event</SPAN></LI></UL><P>為了連接一個(gè)回調(diào)函數(shù)到這些事件之一,你使用函數(shù) g_signal_connect(),像前面介紹的一樣,用上面事件名之一作為 <TTCLASS="LITERAL">name</TT> 參數(shù)。事件的回調(diào)函數(shù)與信號(hào)的回調(diào)函數(shù)有一點(diǎn)點(diǎn)不同:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">gint callback_func( GtkWidget *widget, GdkEvent *event, gpointer callback_data );</PRE></TD></TR></TABLE><P>GdkEvent 是一個(gè) C <TTCLASS="LITERAL">聯(lián)合</TT>結(jié)構(gòu),它的類型依賴于上述事件中的哪個(gè)事件發(fā)生了。為了讓我們得知發(fā)生了哪個(gè)事件,每個(gè)可能的類型都有一個(gè) <TTCLASS="LITERAL">type</TT> 成員來(lái)反映發(fā)生的事件。事件結(jié)構(gòu)的其它部分將依賴于這個(gè)事件的類型。類型的可能的值有:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING"> GDK_NOTHING GDK_DELETE GDK_DESTROY GDK_EXPOSE GDK_MOTION_NOTIFY GDK_BUTTON_PRESS GDK_2BUTTON_PRESS GDK_3BUTTON_PRESS GDK_BUTTON_RELEASE GDK_KEY_PRESS GDK_KEY_RELEASE GDK_ENTER_NOTIFY GDK_LEAVE_NOTIFY GDK_FOCUS_CHANGE GDK_CONFIGURE GDK_MAP GDK_UNMAP GDK_PROPERTY_NOTIFY GDK_SELECTION_CLEAR GDK_SELECTION_REQUEST GDK_SELECTION_NOTIFY GDK_PROXIMITY_IN GDK_PROXIMITY_OUT GDK_DRAG_ENTER GDK_DRAG_LEAVE GDK_DRAG_MOTION GDK_DRAG_STATUS GDK_DROP_START GDK_DROP_FINISHED GDK_CLIENT_EVENT GDK_VISIBILITY_NOTIFY GDK_NO_EXPOSE GDK_SCROLL GDK_WINDOW_STATE GDK_SETTING</PRE></TD></TR></TABLE><P>所以,連接一個(gè)回調(diào)函數(shù)到這些事件之一,我們會(huì)這樣用:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_press_callback), NULL);</PRE></TD></TR></TABLE><P>這里假定 <TTCLASS="LITERAL">button</TT> 是一個(gè)按鈕構(gòu)件?,F(xiàn)在,當(dāng)鼠標(biāo)位于按鈕上并按一下鼠標(biāo)時(shí),函數(shù) button_press_callback() 會(huì)被調(diào)用。這個(gè)函數(shù)應(yīng)該聲明為:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">static gint button_press_callback( GtkWidget *widget, GdkEventButton *event, gpointer data );</PRE></TD></TR></TABLE><P>注意,我們可以把第二個(gè)參數(shù)類型聲明為 <TTCLASS="LITERAL">GdkEventButton</TT>,因?yàn)槲覀冎滥膫€(gè)類型的事件會(huì)發(fā)生。</P><P>這個(gè)函數(shù)的返回值指示這個(gè)事件是否應(yīng)該由 GTK 事件處理機(jī)制做進(jìn)一步的傳播。返回 TRUE 指示這個(gè)事件已經(jīng)處理了,且不應(yīng)該做進(jìn)一步傳播。返回 FALSE 繼續(xù)正常的事件處理。詳見(jiàn)<AHREF="c1751.html">高級(jí)事件和信號(hào)處理</A>這一章。</P><P>GdkEvent 數(shù)據(jù)類型詳情請(qǐng)參見(jiàn)附錄 <AHREF="a2711.html">GDK 事件類型</A>。</P><P>GDK 選中區(qū)和拖放的接口函數(shù)也發(fā)出許多事件,在 GTK 中用信號(hào)來(lái)反映。下列信號(hào)的內(nèi)容詳見(jiàn)<AHREF="x1893.html#SEC-SIGNALSONSOURCEWIDGETS">源構(gòu)件上的信號(hào)</A>和<AHREF="x1893.html#SEC-SIGNALSONDESTWIDGETS">目的構(gòu)件上的信號(hào)</A>這兩章:</P><P></P><ULCOMPACT="COMPACT"><LI><SPAN> selection_received</SPAN></LI><LI><SPAN> selection_get</SPAN></LI><LI><SPAN> drag_begin_event</SPAN></LI><LI><SPAN> drag_end_event</SPAN></LI><LI><SPAN> drag_data_delete</SPAN></LI><LI><SPAN> drag_motion</SPAN></LI><LI><SPAN> drag_drop</SPAN></LI><LI><SPAN> drag_data_get</SPAN></LI><LI><SPAN> drag_data_received</SPAN></LI></UL></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="x223.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="x344.html"ACCESSKEY="N">Next >>></A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">信號(hào)和回調(diào)函數(shù)的原理</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="c103.html"ACCESSKEY="U">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">Hello World 詳解</TD></TR></TABLE></DIV></BODY></HTML>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -