工作達人(Job Da Ren)
服務是我架站的宗旨,全球華人及男女青年未來的工作方向

  • Home
  • About achi
    • My Disclosure Policy
  • Archives
    • Link Exchange
  • 隱私權政策
  • stock photos
  • Contact
  • Top Posts
  • Poll
  • wp-buzz
    • ㄚ琪的Live PR
  • Advertise
Job Da Ren > LinuxDev > GTK+ 2.0 教學-從這裡開始

 Powered by Max Banner Ads 
« GTK+ 2.0 教學-簡介
GTK+ 2.0 教學-編譯 Hello World 程式 »

GTK+ 2.0 教學-從這裡開始

Please wait 二月 19th, 2008 by ㄚ琪 | |2010/02/25

 Powered by Max Banner Ads 

你首先做的第一件事,當然是下載 GTK 原始碼,並安裝它。你總是能從 ftp.gtk.org 得到最新版本。你也可以在 http://www.gtk.org/ 上查看其它 GTK 原始碼的訊息。GTK 使用 GNU autoconf 配置。解壓縮後,輸入 ./configure –help 查看選項列表

GTK 原始碼的發行套件中包含教學中所有範例的原始碼,每個範例中包含有 Makefiles 文件,用以方便編譯。

一開始介紹 GTK,我們會盡可能從簡單的程式開始。這個程式創建 200×200 大小的視窗,沒有辦法退出,除非你從 shell 中將它殺掉。

#include <gtk/gtk.h>
int main( int argc,char *argv[]){ 

   GtkWidget *window; 

   gtk_init (&argc, &argv); 

   window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 

   gtk_widget_show  (window); 

   gtk_main (); 

   return 0; 

}

你可以用 gcc 編譯上面的程式:

gcc base.c -o base `pkg-config –cflags –libs gtk+-2.0`

不常用的編譯參數在下面編譯 Hello World 程式中解釋。

所有程式應該包含 gtk/gtk.h,其中聲明了變數、函式以及結構等,這些東西會在你的程式中使用。

下一行:

gtk_init (&argc, &argv);

這個函式 gtk_init(gint *argc, gchar ***argv) 會在每個 GTK 應用程式中呼叫。該函式設定了預設的視頻(visual)和顏色映射模式(color map),接著會呼叫函式 gdk_init(gint *argc, gchar ***argv)。該函式初始化要使用的函式庫,設定預設的信號處理,並檢查傳遞給你的程式的命令列參數,尋找下列之一:

  • –gtk-module
  • –g-fatal-warnings
  • –gtk-debug
  • –gtk-no-debug
  • –gdk-debug
  • –gdk-no-debug
  • –display
  • –sync
  • –name
  • –class

這些參數將會從參數表中刪除,你的程式不會去解析或忽略這些參數。這就創建了可以被所有 GTK 程式接受的一組標準參數。

下面兩行程式會創建並顯示一個視窗

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_widget_show (window);

GTK_WINDOW_TOPLEVEL 參數指定了我們承習視窗管理程式的外觀。這裡不會創建一個0×0 大小的視窗,而是一個沒有子元件的視窗預設大小設置為 200×200,這樣你仍然能操作它。

gtk_widget_show() 函式讓 GTK 知道,我們已經設置完元件的屬性,可以顯示它了。

最後一行進入 GTK 主處理迴圈。

  gtk_main ();

gtk_main() 是另一個可以在每個 GTK 程式中見到的函式呼叫。當程式執行到這裡,GTK 會「睡著」等待 X 事件 (如按鈕或鍵盤按下)、逾時(timeouts)或文件 IO 通知發生。在我們的範例中,事件被忽略。
好,現在來寫一個只有一個按鈕元件的程式,這是一個標準的 GTK Hello World。

用 GTK 來寫 Hello World

#include <gtk/gtk.h>
/* 這是一個回呼函式。data 參數在本範例中被忽略。   * 後面有更多的回呼函式範例。*/
void hello( GtkWidget *widget, gpointer   data )
{
   g_print ("Hello World\n");
}
gint delete_event( GtkWidget *widget, GdkEvent  *event, gpointer   data )
{
/* 如果你的 "delete_event" 信號處理函式傳回 FALSE,GTK 會發出 "destroy" 信號。
 * 傳回 TRUE,你不希望關閉視窗。
 * 當你想彈出「你確定要退出嗎?」對話框時它很有用。*/
g_print ("delete event occurred\n");
/* 改 TRUE 為 FALSE 程式會關閉。*/
return TRUE;
}
/* 另一個回呼函式 */
void destroy( GtkWidget *widget, gpointer data )
{
   gtk_main_quit ();
}
int main( int argc,char *argv[] )
{
/* GtkWidget 是元件的存儲型態 */
GtkWidget *window;
GtkWidget *button;
/* 這個函式在所有的 GTK 程式都要呼叫。參數由命令列中解析出來並且送到該程式中*/
gtk_init (&argc, &argv);
/* 創建一個新視窗 */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* 當視窗收到 "delete_event" 信號 (這個信號由視窗管理器發出,通常是「關閉」
 * 選項或是標題欄上的關閉按鈕發出的),我們讓它呼叫在前面定義的 delete_event() 函式。
 * 傳給回呼函式的 data 參數值是 NULL,它會被回呼函式忽略。*/
g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL);
/* 在這裡我們連接 "destroy" 事件到一個信號處理函式。
 * 對這個視窗呼叫 gtk_widget_destroy() 函式或在 "delete_event" 回呼函式中傳回 FALSE 值
 * 都會觸發這個事件。*/
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL);
/* 設置視窗邊框的寬度。*/
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
/* 創建一個標籤為 "Hello World" 的新按鈕。*/
button = gtk_button_new_with_label ("Hello World");
/* 當按鈕收到 "clicked" 信號時會呼叫 hello() 函式,並將NULL傳給
 * 它作為參數。hello() 函式在前面定義了。*/
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (hello), NULL);
/* 當點擊按鈕時,會通過呼叫 gtk_widget_destroy(window) 來關閉視窗。
 * "destroy" 信號會從這裡或從視窗管理器發出。*/
g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_widget_destroy), window);
/* 把按鈕放入視窗 (一個 gtk 容器) 中。*/
gtk_container_add (GTK_CONTAINER (window), button);
/* 最後一步是顯示新創建的按鈕和視窗 */
gtk_widget_show (button);
gtk_widget_show (window);
/* 所有的 GTK 程式必須有一個 gtk_main() 函式。程式執行停在這裡
 * 等待事件 (如鍵盤事件或滑鼠事件) 的發生。*/
gtk_main ();
return 0;
}

歷史上的今天

  • 2011: Happy Birthday Chiang Wu Hsiung,Tomoki Ueno,林柏志
  • 2008: GTK+ 2.0 教學-編譯 Hello World 程式
Print Friendly
Be Sociable, Share!
  • Tweet

訂閱工作達人(Job Da Ren)


 Powered by Max Banner Ads 

Related posts from the blog

  • GTK+ 2.0 教學-視埠 Viewports
  • GTK+ 2.0 教學-封裝元件
  • GTK+ 2.0 教學-Hello World 詳解
  • GTK+ 2.0 教學-中文版說明
  • GTK+ 2.0 教學
  • 程式語言教學 – C、C++、OpenGL、STL
  • GTK+ 2.0 教學-對齊元件 The Alignment widget

Tags: gtk,tutorial,教學
作者:ㄚ琪 | 本文分類:[LinuxDev] | 留言 | 引用

透過Facebook發表迴響,不保證ㄚ琪可以知道你的留言:

2 Responses to “GTK+ 2.0 教學-從這裡開始”

  1. GTK+ 2.0 教學 | 工作達人 說道:
    2008-02-19 at 15:47:06

    [...] 從這裡開始 [...]

    回覆
  2. MinGW 下第一個 GTK 程式 | 工作達人(Job Da Ren) 說道:
    2011-01-19 at 22:01:43

    [...] 然後再貼到Makefile裡頭這樣繁瑣的命令,當然以前ㄚ琪在用 GTK 來寫 Hello World說明用gcc base.c -o base `pkg-config -cflags -libs gtk+-2.0`這樣一行的方式在MinGW下好像行不通,主要原因好像在字元『`』的關係,Google了很久,終於發現在MinGW編譯GTK+應用程式的簡便命令,只要下: [...]

    回覆

發表迴響

點這裡取消回覆
名稱:(必)
電子郵件位址(並不會被公開)(必)
個人網站

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CAPTCHA 驗證圖片
更換一張圖片
*

廠商贊助

贊助廠商連結請點我

最新照片

P3280284 DSC_6158 P1111399 P3070133 P1111406 P4121409 DSC_6440 P3280289 P1121443
觀看更多的相片 >

熱門文章

  • GTK+ 2.0 教學 - 13,446 views
  • jQuery UI入門 - 7,623 views
  • 介紹NetBeans下的Android開發 - 6,967 views
  • 正確使用java array - 5,898 views
  • eclipse 3.4.1 中文 好好玩 - 5,124 views
  • 程式語言教學 – C、C++、OpenGL、STL - 4,233 views
  • GTK+ 2.0 教學-從這裡開始 - 3,648 views
  • jQuery UI 的 Demos展示及說明文件 - 3,562 views
  • Python 圖形使用者介面程式設計 - 2,813 views
  • 如何在手機裡安裝Java ME應用程式 - 2,602 views
  • Microsoft Visual C# 2010 Express更新 - 2,532 views
  • sudo apt-get install sun-java5-jdk - 2,332 views

隨便看看

    懶得上網看文章!

    就來訂閱我的電子報吧!

    輸入你的電子郵件地址:

    發送者為 FeedBurner

    近期文章

    • 感興趣的xampp-win32-1.7.7
    • 與其給我邀請送禮物,倒不如幫工作達人按讚
    • 【夏日保養】小心辦公室冷氣,讓雙手提早變老!
    • 成人紙尿褲價格戰 苦了父母
    • Smart Life創意無痕壁貼
    • 不用出國的專業全美語兒童營隊
    • 試用BUGSLOCK純天然香茅防蚊手環(防蚊效果一級棒)
    • 多功能的除污達人
    • 五月連結Fun Taiwan送【DIANA】愛媽咪施華洛彩鑽項鍊
    • 網購熱銷缺貨!titan抗菌活力襪,抑菌除臭、護腳2合1

    鳥鳴啾啾

      Follow Me on Twitter

      與我交誼!做我的粉絲!

      • technorati
      • Twitter

      其它

      • 登入
      • 文章 RSS 訂閱
      • 迴響 RSS 訂閱
      • WordPress.org

      快上www.blognews.com.tw,就有機會天天免費吃大餐!

      我的書摘

      RSS 科技新聞 – 頭條新聞 – Yahoo!奇摩新聞

      • 摩托行動侵權 部分手機遭禁 2012/05/19
      • 臉書掛牌上市 電腦出包 2012/05/19
      • 揭祕深海不明物體 專家:罕見水母! 2012/05/19
      • 大馬發明展 台灣學子溫馨奪金 2012/05/19
      • 亞洲市場成長趨緩 臉書新挑戰 2012/05/18
      • 蘋果亞馬遜相爭 面板雙虎得利 2012/05/18
      • 擁近10億用戶個資 將是獲利關鍵 2012/05/18
      • 小行星撞地球 中日菲會重創 2012/05/18
      • 小行星若撞地球 大陸先遭殃 2012/05/18
      • 英「條碼」小鎮 維基百科導遊 2012/05/18
      • 臉書濫用個資 人權組織要告 2012/05/18
      • 美報告:陸藉西方科技壯大軍力 2012/05/18
      • 點閱率低 臉書廣告效果惹議 2012/05/18
      • 英小鎮掃條碼 維基百科當導遊 2012/05/18
      • 玻璃構成的一天 影片解密未來世界 2012/05/18

      Blogroll

      • 628之巨蟹座的水世界
      • Blog語法研究室
      • Chip123創新論壇
      • Chungyuchen's Blog
      • Daphne's Fresh Look
      • Frank的雜記
      • Fun Taiwan
      • GOWEIS的好康分享記事簿
      • L K K 的心聲
      • LuckyDog 抽獎達人
      • Office 達人空間(章美蘭)
      • Potato的探索樂園
      • QK3000小遊戲
      • Russian Brides
      • Web Game @Live
      • yal's blog
      • 《心靈翅膀》發現不同的聲音
      • 『PDF』點滴夯發現
      • ㄚ晟的IT筆記
      • 企鵝碎碎唸
      • 傑尼斯部落
      • 免費訊息軟體下載
      • 免費軟體下載
      • 凱特打結該該叫
      • 台中蔣小姐
      • 台灣天氣網
      • 台灣排行榜 Rank.tw
      • 台灣部落格網站目錄
      • 嗡財財嚕嚕唆哈
      • 大紀元賀卡城
      • 好朋友二手家具
      • 小遊戲388
      • 小遊戲天堂
      • 小邱邱的測量放樣工程
      • 拆組達人
      • 敗家誌°
      • 時間不等於金錢
      • 月光下的嘆息!
      • 梅森手扎
      • 淘淘寶小遊戲天堂區
      • 玩物尚誌
      • 生活工場家
      • 白文MIMI與小鸚KIKI的生活記事
      • 紅色死神
      • 綠色工廠 Easylife Blog
      • 網路聯盟行銷中心
      • 美食美景紐西蘭美女的家
      • 蓉兒ㄉ天空
      • 遊戲世界
      • 遊戲阿布
      • 遨遊天地任我行
      • 野兔村
      • 阿文兄A日誌
      第五屆部落客百傑 第五屆部落客百傑 第五屆部落客百傑



      GetRank - Webmaster and Seo Tools
    • 分類表

      • Android (14)
      • ASP (3)
      • BU幣任務區 (6)
      • C# (17)
      • CentOS (4)
      • CGI (1)
      • CompScience (1)
      • C_and_CPP (111)
      • Database (5)
      • DB2 (4)
      • debian (2)
      • Featured (3)
      • In Search of Stupidity (6)
      • Information Architecture for the World Wide Web (11)
      • j2me (25)
      • java (98)
      • JavaScript (35)
      • JavaScript權威指南:ECMAScript5 + HTML5 DOM + HTML5 BOM 範例精粹 (2)
      • Languages (5)
      • lds (1)
      • Linux (6)
      • LinuxDev (179)
      • MSSQL (6)
      • MySQL (13)
      • NetSecurity (1)
      • Office (3)
      • Oracle (2)
      • Palm (1)
      • Peopleware: Productive Projects and Teams (35)
      • perl (16)
      • php應用 (64)
      • PostgreSQL (2)
      • Python (102)
      • Quality is Still Free (15)
      • ruby (1)
      • Solaris 系統 (1)
      • Sponsored Reviews (133)
      • Symbian (4)
      • System (1)
      • THE MYTHICAL MAN-MONTH (20)
      • The Peter Principle (14)
      • TinyERP (6)
      • ubuntu (37)
      • Uncategorized (4)
      • VBA (1)
      • VoIP (2)
      • Web Blog (130)
      • weberp (16)
      • Windows (5)
      • windows mobile (1)
      • Wordpress (34)
      • xml (6)
      • ㄚ琪走透透 (56)
      • 中壢社大河川踏查社 (1)
      • 人才庫 (4)
      • 企業ERP (1)
      • 免費好康 (61)
      • 公司簡介 (201)
      • 口碑貼文 (179)
      • 商品推銷 (11)
      • 就業資源 (8)
      • 工作大未來 (9)
      • 工作訓練 (1)
      • 廠商簡介 (1)
      • 我攝過的教堂 (6)
      • 我的論文 (2)
      • 掌握Google關鍵字:SEO搜尋秘技全攻略 (29)
      • 數位拍古蹟 (5)
      • 文章導讀 (141)
      • 求才訊息 (18)
      • 生活與社會 (3)
      • 發燒鑑貨文 (120)
      • 直到路的盡頭 (5)
      • 神社 (2)
      • 科技通訊 (8)
      • 笑話 (22)
      • 約耳趣談軟體 (44)
      • 組合語言 (14)
      • 網站報報 (36)
      • 網站評論 (371)
      • 網路賺錢 (46)
      • 美味食記 (78)
      • 翻譯 (65)
      • 職業達人 (1)
      • 自然與科學 (2)
      • 藝術與表演 (1)
      • 觀察力培養 (1)
      • 設計模式之禪 (1)
      • 貼貼樂 (180)
      • 資料處理 (17)
      • 軟體報報 (52)
      • 閒聊 (253)
    • 最新的回應

      • 小倆口東京自由行-Day 2一日乘車券 | 工作達人(Job Da Ren) 在 小倆口東京自由行-Day 2明治神宮
      • Washer Parts - Our site provides essential information on ge appliance parts - Ge Appliance Parts 在 Whirlpool Appliance Parts
      • ㄚ琪 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
      • MESON 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
      • GP 超霸充電池高電力鎳氫(NiMH)電池第十五次使用 | 工作達人(Job Da Ren) 在 GP 超霸充電池高電力鎳氫(NiMH)電池試用
      • ㄚ琪 在 webERP : WebERP 4.03.5 推出

      請幫工作達人按讚

      • Copyright c 2005 - 2009 工作達人(Job Da Ren) and is proudly powered by WordPress
      • Entries (RSS)
      • Comments (RSS)
      • Home
      • About achi
      • Archives
      • 隱私權政策
      • stock photos
      • Contact
      • Top Posts
      • Poll
      • wp-buzz
      • Advertise
      ss_blog_claim=fec8047405cd9a7a8d8d623b47b39edf
      Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣
      This work by ㄚ琪 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣.

      无觅相关文章插件,快速提升流量