在 GTK 中創建一個元件的一般步驟是:
- gtk_*_new() – 創建各種元件的函式。這些函式都將在這一節中作詳細的介紹。
- 把所有想連接的信號都連接到對應的信號處理函式。
- 設定元件的屬性。
- 用 gtk_container_add() 或 gtk_box_pack_start()等適當的函式把元件放置到一個容器元件中。
- gtk_widget_show() 顯示元件。
gtk_widget_show() 讓 GTK 知道我們已經完成設定元件屬性的工作,並且能夠讓它顯示出來了。你也可以用 gtk_widget_hide 使元件再次隱藏起來。各個元件顯示的順序並不重要,不過我建議在最後顯示視窗,這樣整個視窗就可以立刻彈出來,而不是讓用戶看著視窗裡的元件一個個生成並顯示出來。在視窗(也是一個元件)用 gtk_widget_show() 函式顯示出來之前,它的子元件並不會被顯示。
型別轉換
再繼續下去你會發現,GTK 使用了一套型別轉換系統。它利用的是一套巨集,這些巨集在轉換前還會測試能否進行轉換。一些常見的巨集是:
G_OBJECT (object) GTK_WIDGET (widget) GTK_OBJECT (object) GTK_SIGNAL_FUNC (function) GTK_CONTAINER (container) GTK_WINDOW (window) GTK_BOX (box) |
這些都用來在函式中轉換參數。你將在範例中看到它們的使用,只要看看函式的宣告就可以知道什麼時候需要使用它們。
在下節介紹的類別的組織裡,你將知道所有的 GtkWidget 都是從 GObject 這個基本類別生來的。也就是說,你能把widget傳給任何需要以object型態作為參數的函式 – 只要用一下 G_OBJECT() 巨集。
例如:
g_signal_connect( button, "clicked", G_CALLBACK (callback_function), callback_data); 這樣把 button 轉換為一個 object,並提供一個函式指標作為回呼函式。
很多元件也是容器,如果你看下一節介紹的類別的組織,你就會注意到很多元件是從容器類別生來的。這些元件都可以用 GTK_CONTAINER 巨集轉換後傳遞給需要以container作為參數的函式。
可惜的是,這些巨集在本教學中並沒有廣泛地提及,不過我推薦去看一下 GTK 的標頭檔或者 GTK API 參考手冊。這將很有用。實際上,通過看函式的宣告來學習一個元件的使用也不難。
1 則留言