GTK+中構件的基本概念
分類:GTK+
有窗構件和無窗構件
根據是由有關聯的GdkWindow,構件可以分爲“有窗口構件”和“無窗口構件”
GdkWindow窗口和GtkWindow窗口是不一樣的。GdkWindow是一個X服務器用於劃分平面鏡的抽象概念。一個GdkWindow窗口,對x服務器給出了關於將要顯示的圖形的結構信息。
大多數構件都有一個相關聯的GdkWindow窗口,構件就繪製在這個窗口上。
有一些構件沒有與之相關聯的GdkWindow,是相對輕量級的,如GtkLabel構件。“無窗口的構件”繪製在它的父構件的GdkWindow窗口上。
一些操作要求有一個GdkWindow窗口(例如捕獲事件,繪製背景顏色),因此不能在無窗口構件上做這些事情
敏感性
構件可以是敏感的或不敏感的,不敏感的構件不能對輸入進行響應。一般不敏感的構件是灰色的,不能接收鍵盤焦點。
可以用gtk_widget_set_sensitive()函數改變構件的敏感性。該函數原型如下:
void gtk_widget_set_sensitive(GtkWidget *widget, gboolean sensitive);
構件缺省是敏感的。但只有構件的所有容器是敏感的,構件纔是真正敏感的。因此,容器的敏感性影響整個容器內所有構件的敏感性。可用GTK_WIDGET_IS_SENSITIVE宏來測試構件的真正敏感性,用GTK_WIDGET_SENSITIVE宏測試構件本身的敏感性。
焦點,獨佔和缺省構件
焦點
X Window的當前頂層窗口某個構件可能具有鍵盤焦點。頂層窗口接收到的任何鍵盤事件都被髮送到這個具有焦點的構件
大多數構件在具有焦點時,會有一個視覺指示,如具有一個細黑框。
獨佔
構件從其它構件中獨佔鼠標指針和鍵盤。即,構件是“模態”的,用戶只能向這個構件中輸入字符,鍵盤焦點也不能改變到其它構件。
有兩種級別的獨佔:應用程序級的獨佔和Gdk級的獨佔。構件獨佔是一個GTK+的概念,它只獨佔同一個應用程序中的其它構件的事件。而Gdk級的獨佔發生在X服務器範圍內,也就是,其它應用程序不能接收到鍵盤和鼠標事件
每個窗口至多有一個缺省構件。
構件狀態
構件的狀態決定了它們的外觀。狀態的準確含義及其視覺表達依賴於特定構件以及當前窗口管理器的主題
構件可能有5種狀態,可以用GTK_WIDGET_STATE(widget)宏來獲取構件的狀態值,這個宏返回指示構件狀態的常量。如下:
狀態 | 狀態值 | 含義 |
---|---|---|
normal | GTK_STATE_NORMAL | 就是原來該有的樣子 |
active | GTK_STATE_ACTIVE | 構件被選中 |
prelight | GTK_STATE_PRELIGHT | 鼠標越過一個構件 |
selected | GTK_STATE_SELECTED | 構件是放在一個列表中,或者是在其它類似狀態,當前是被選中的 |
insensitive | GTK_STATE_INSENSITIVE | 構件是灰色的,不活動的,或者不響應 |