<<< PreviousGLibNext >>>字串處理GLib 定義了一個叫做 GString 的新類型,該類型相似於標準 C中的string,但可以自動成長。字串資料以null結尾。該類型可以防止程式中的緩衝區溢位錯誤。這是一個非常重要的特性,因此我推薦使用GString。GString 有一簡單定義:struct GString { gchar *str; /* 指向當前以‘/0’結尾的字串。 */ gint len; /* 當前長度
編譯 Hello World 程式編譯命令是:gcc -Wall -g helloworld.c -o helloworld `pkg-config --cflags gtk+-2.0` / `pkg-config --libs gtk+-2.0`這裡使用了程式 pkg-config,可以從 www.freedesktop.org 得到。這個程式讀取 GTK 附帶的 .pc 檔案來決定編譯 GTK 程式需要的編譯選項。pkg-config --cflags gtk+-2.0 列出
Glade是針對GTK+的圖形使用者介面產生器 (User Interface Builder forGTK+),簡而言之,是一個您可以所視即所得設計視窗畫面,並為您產生相對應程式碼的工具,在這邊將示範一下如何於Ubuntu下安裝Glade,並以 GtkHBox與 GtkVBox 中的成果作為範例,介紹如何使用Glade產生相對應的畫面及編寫程式。在Ubuntu下要安裝Glade,可以如以下的指令,其中後兩個指令是為了執行自動產生程式碼的Shell指令autogen.sh所必需:$ sudo
在 自訂 callback 函式中使用過GtkButton作為範例,最基本的GtkButton建立方式是透過gtk_button_new_with_label()來建立一個指定文字的按鈕,您也可以使用gtk_button_new_with_mnemonic(),這會建立一個具有提示底線及快捷鍵功能的按鈕,例如將 自訂 callback 函式 範例的gtk_button_new_with_label()該行換成gtk_button_new_with_mnemonic():button = gtk_
訊號和回呼函數的原理在 2.0 版,訊號系統已從 GTK 移到 GLib,因此在函數和類型的說明中有首碼 "g_" 而不是 "gtk_"。我們不打算介紹 GLib 2.0 訊號系統相對 GTK 1.2 訊號系統擴充的細節。在我們詳細分析 helloworld 程式之前,我們會討論訊號和回呼函數。GTK 是一個事件驅動的工具包,意味著它會等在 gtk_main() 那裡,直到下一個事件發生,才把控制權傳給適當的函數。控制權的傳遞是使用“訊號”的辦法來完成的。(注意這裡的訊號並不等同於 Unix
在版面配置上,可以會使用GtkNootbook來作功能頁的分類,它提供多個顯示頁,可以藉由上方的標籤來選擇所要的功能頁面,下面的程式簡單的示範如何將元件加入GtkNotebook成為一個標籤頁,其中createTab()函式用以建立一個GtkHBox,內含圖片與文字,用以作為功能頁的標籤顯示,要加入一個功能頁,可以使用gtk_notebook_append_page()函式,指定功能頁內容及標籤。gtk_note_book_demo.c#include
事件除有前面描述的訊號機制外,還有一套 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
<<< PreviousGLibNext >>>公用程式和錯誤處理函數gchar *g_strdup( const gchar *str );替代strdup函數。把原字串內容複寫到新分配的儲存塊中,返回指向它的指標。gchar *g_strerror( gint errnum );我推薦使用此函數處理所有錯誤資訊,它比 perror() 和其它類似函數更好,更具可移植性。此函數的輸出通常為如下格式:program name:function that
GtkPaned是個版面分割元件,可以將視窗版面進行水平切割或垂直切割,您可以使用以下的函式來建立水平或垂直切割的GtkPaned:GtkWidget *gtk_hpaned_new(void);GtkWidget *gtk_vpaned_new(void);一個GtkPaned有左右或上下兩個區域可以加入子元件,您可以使用gtk_paned_pack1()將元件加入左邊或上面,使用gtk_paned_pack2()將元件加入右邊或下面:void
您可以建立具備影像及文字的按鈕,最基本的方式可以透過gtk_button_new_from_stock(),這可以讓您從GTK既有的影像資源中取用影像給按鈕使用,gtk_button_new_from_stock()使用時的參數與出現的影像,可在 Stock Items 查詢。以實際的例子來說,將 自訂 callback 函式 中的按鈕產生程式片段改為以下:button = gtk_button_new_from_stock(GTK_STOCK_YES);
核取鈕(Check Button)是可以進行選項複選的元件,單選鈕(RadioButton)是只能進行選項單選的元件,在GTK中分別使用GtkCheckButton與GtkRadioButton來負責,它們是雙態按鈕GtkToggleButton的子類:GtkToggleButton +----GtkCheckButton +----GtkRadioButton
有些元件預設並沒有捲軸,當視窗或父元件無法顯示其大小時,只會顯示部份區域,但不會出現捲軸,如果您希望這類元件可以出現捲軸,則可以使用GtkScrolledWindow,在 GtkTextView 中曾經使用過GtkScrolledWindow,在使用gtk_scrolled_window_new()建立GtkScrolledWindow時可以給定GtkAdjustment,在 GtkSpinButton
在程式中常出現一些簡單的對話或訊息方塊,有GTK中,它們都是GtkDialog的子類,在這邊先介紹一些GTK內建的對話方塊,常見類型之一是GtkMessageDialog,首先看個簡單的範例,改寫 自訂 callback 函式 中的例子,按下按鈕後會出現訊息方塊:message_dialog_demo.c#include <gtk/gtk.h>void button_clicked(GtkWidget *button, gpointer data) { GtkWidget
GtkAlignment實際上是GtkContainer的子類,可以設定它當中的子元件對齊與大小:GtkContainer +----GtkBin
GtkFrame是GtkContainer的子類,可以容納子元件,並擁有一個外框及標籤文字:GtkContainer +----GtkBin +----GtkFrame 您可以使用gtk_frame_new()建立一個GtkFrame,並在建立時指定標籤文字,或是在之後使用gtk_frame_set_label()設定文字,標籤文字的位置預設是左上邊,您可以使用gtk_frame_set_label_align()設定標籤文字的位置:GtkWidget*
儲存管理gpointer g_malloc( gulong size );這是 malloc() 函數的替代函數,不需要檢查傳回值,因為此函數已替你做這件事了。如果儲存分配因任何原因失敗,應用程式將被終止。gpointer g_malloc0( gulong size );和上一函數相同,但在返回指向所分配儲存塊的指標之前,將該儲存塊清 0。gpointer g_realloc( gpointer mem, gulong size
從這裡開始你首先做的第一件事,當然是下載 GTK 來源程式,並安裝它。你總是能從 ftp.gtk.org 得到最新版本。你也可以在 http://www.gtk.org/ 上查看其它 GTK 來源程式的資訊。GTK 使用 GNU autoconf 配置。解壓縮後,輸入 ./configure --help 查看選項列表GTK 源碼發布包中包含教程中所有樣本的代碼,每個樣本中包含有 Makefiles 檔案,用以方便編譯。一開始介紹 GTK,我們會儘可能從簡單的程式開始。這個程式建立 200x20
加入GtkHandleBox的元件,是一個可以被拿下來(torn off)的元件,或稱之為所謂的浮動元件,GtkHandleBox是GtkContainer的子類:GtkContainer +----GtkBin +----GtkHandleBox 這樣的拿下(tear off)功能,常見的就是用來製作一個浮動選單,或是一個浮動工具列,下面這個範例是個簡單的示範,您可以瞭解GtkHandleBox的設定及功用,範例中包括一個放進GtkHandleBox的 GtkLabel,
<<< PreviousGLibNext >>>計時器計時器函數可用於對操作計時(即查看操作所耗費的時間)。首先用 g_timer_new() 函數建立一個新計時器,然後用g_timer_start() 函數啟動計時,用 gh_timer_stop() 停止計時,用 g_timer_elapsed()函數決定所耗的時間。GTimer *g_timer_new( void );void g_timer_destroy( GTimer *timer );void
GtkMenuBar、GtkMenu、GtkMenuItem是用來製作視窗程式的選單功能,以下是三個元件的作用示意圖:圖中的File、Edit、About、Open、Save、分隔線、Close等項目,都是GtkMenuItem的實例,在File底下有子選單,這是GtkMenu的實例,視窗上方則為GtkMenuBar的實例。上圖中,File、Edit、About附加至GtkMenuBar中:GtkMenuBar *menubar = gtk_menu_bar_new();//