【GTK】信號量(signal)大全


信號函數:
gint gtk_signal_connect(GtkObject *object,gchar *name,GtkSignalFuncfunc,gpointer func_data);
回掉函數的格式:
void callback_func(GtkEidget *widget,gpointer callback_data);
GTK的事件:gtk組件的行為或者X服務器發送的事件可以與下列事件聯系起來:
button_press_event  
  按鈕按下          
button_release_event 
  按鈕釋放
motion_notify_event 
  鼠標移動
delete_event 
  使用窗口管理器關閉
destroy_event 
  關閉
expose_event 
  曝光
key_press_event 
  按鍵按下
key_release_event 
  按鍵釋放
enter_notify_event 
  鼠標指針進入組件
leave_notify_event 
  鼠標指針離開組件
configure_event 
  屬性改變
focus_in_event 
  獲得聚焦
focus_out_event 
  失去聚焦
map_event 
  映射
unmap_event 
  消失
property_notify_even 
  屬性改變
selection_clear_event 
  選擇清除
selection_request_event 
  選擇請求
selection_notify_event 
  選擇通知
proximity_in_event 
  接近
proximity_out_event 
  離開
drag_begin_event 
  拖開始
drag_request_event 
  拖請求
drag_end_event 
  拖結束
drop_enter_event 
  放進入
drop_leave_event 
  放離開
drop_data_available_event 
放數據可用

除有前面描述的信號機制外,還有一套 events 反映 X事件機制。回調函數可以與這些事件連接。這些事件是:


  • event
  • button_press_event
  • button_release_event
  • scroll_event
  • motion_notify_event
  • delete_event
  • destroy_event
  • expose_event
  • key_press_event
  • key_release_event
  • enter_notify_event
  • leave_notify_event
  • configure_event
  • focus_in_event
  • focus_out_event
  • map_event
  • unmap_event
  • property_notify_event
  • selection_clear_event
  • selection_request_event
  • selection_notify_event
  • proximity_in_event
  • proximity_out_event
  • visibility_notify_event
  • client_event
  • no_expose_event
  • window_state_event

為了連接一個回調函數到這些事件之一,你使用函數 g_signal_connect(),像前面介紹的一樣,用上面事件名之一作為name 參數。事件的回調函數與信號的回調函數有一點點不同:

gint callback_func( GtkWidget *widget,GdkEvent *event,gpointer callback_data ); 
 GdkEvent 是一個 C 聯合結構,它的類型依賴於上述事件中的哪個事件發生了。為了讓我們得知發生了哪個事件,每個可能的類型都有一個 type 成員來反映發生的事件。事件結構的其它部分將依賴於這個事件的類型。類型的可能的值有: 
 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 
 所以,連接一個回調函數到這些事件之一,我們會這樣用: 
g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_press_callback), NULL); 
 這里假定 button 是一個按鈕構件。現在,當鼠標位於按鈕上並按一下鼠標時,函數 button_press_callback() 會被調用。這個函數應該聲明為: 
static gint button_press_callback( GtkWidget *widget, GdkEventButton *event, gpointer data ); 
注意,我們可以把第二個參數類型聲明為 GdkEventButton,因為我們知道哪個類型的事件會發生。 這個函數的返回值指示這個事件是否應該由 GTK 事件處理機制做進一步的傳播。返回 TRUE 指示這個事件已經處理了,且不應該做進一步傳播。返回 FALSE 繼續正常的事件處理。詳見高級事件和信號處理這一章。 GdkEvent 數據類型詳情請參見附錄 GDK 事件類型。 GDK 選中區和拖放的接口函數也發出許多事件,在 GTK 中用信號來反映。下列信號的內容詳見源構件上的信號目的構件上的信號這兩章: 
  • selection_received
  • selection_get
  • drag_begin_event
  • drag_end_event
  • drag_data_delete
  • drag_motion
  • drag_drop
  • drag_data_get
  • drag_data_received


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM