GTK+ 2.0 教學-元件的解析

要想創建一個新的元件,最重要的是要對 GTK 物件的工作原理有所瞭解。這一節只是一個簡述,詳見參考手冊。

GTK 元件具有物件導向的特性。然而,它是用標準的 C 來寫的。比起用C++來說,這可以大大改善可移植性及穩定性;但是,這也意味著寫元件的人需要小心許多實作上的問題。所有同一類別的元件的一般資訊(比如所有的按鈕元件)是放在在類別結構裡,類別的信號訊息只以該結構存儲了一份(充當 C 中的虛函式)。為了支援繼承,類別結構的第一個欄位必須是它的父類別結構的一個拷貝。GtkButton 的類別結構宣告如下:

struct _GtkButtonClass
{
  GtkContainerClass parent_class;

  void (* pressed)  (GtkButton *button);
  void (* released) (GtkButton *button);
  void (* clicked)  (GtkButton *button);
  void (* enter)    (GtkButton *button);
  void (* leave)    (GtkButton *button);
};

當將一個按鈕視為容器時(例如,當調整它的大小時),它的類別結構被轉換為 GtkContainerClass,並且相應的欄位用於處理信號。

每一個元件也有一個結構,它是創建每個實體的基礎。該結構有為每個元件的實體存儲不同訊息的欄位。我們把該結構稱為物件結構。如下是按鈕類別:

struct _GtkButton
{
  GtkContainer container;

  GtkWidget *child;

  guint in_button : 1;
  guint button_down : 1;
};

請注意,它同類別結構相似,第一個欄位是父類別的物件結構,因此該結構在需要時可以轉換為父類別的物件結構。

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *