導航:首頁 > 源碼編譯 > pango的編譯安裝方法

pango的編譯安裝方法

發布時間:2024-12-09 06:32:13

Ⅰ 我在Windows的.NET Framework上寫了一個項目,現在通過Mono移植到Linux上,無法運行

可以。
來自作者:仙人掌工作室
眾所周知,C#是Microsoft推出的.NET語言,只能在.NET平台上運行,例如Win 9x、ME、N
T、2000、XP和Win CE之類的操作系統。但是,現在卻有了一個叫做Mono的項目,它的目標
就是把.NET及其編程語言移植到非Windows的平台上。現在,C#是唯一被移植到非Windows
平台的.NET語言。
在任何一個平台(操作系統+硬體體系)上,編寫和運行程序的三個最根本的需求是庫、編
譯器/解釋器、運行環境。庫以類和方法(函數)的形式提供常用的常式,簡化大型程序的
編寫。.NET框架也不例外,包含了許多類庫。另外,把程序轉換成可執行形式以及運行執
行文件時,編譯器和運行環境是必不可少的。Mono軟體包包含了.NET類庫的一部分、一個
C#編譯器和.NET運行環境CLR(Common Language Runtime,公共語言運行時環境)。
Mono聲稱支持Linux、Solaris、Free BSD和MS Windows;除了Intel x86系列的CPU(486,
各類Pentium等)之外,據說還要支持Sparc、PowerPC和StrongArm處理器。
下面就來看看如何在Linux上運行Mono。
命令行應用
先從Mono主頁()下載軟體,執行下面的命令安裝所有RPM:
rpm -ivh *.rpm
安裝完成後,所有基本的動態執行庫,包括System.Data.dll、System.dll、System.Draw
ing.dll、System.Web.dll和System.Xml.dll都被復制到/usr/lib下。接下來,在Linux文
本編輯器中輸入下面的內容,把文件保存為HelloMono.cs:
class HelloMono
{
public static void Main(string[ ] args)
{ System.Console.WriteLine( "Hello Mono ");
}
}
執行下面的命令編譯C#文件:
mcs HelloMono.cs
mcs是Mono的C#命令行編譯器。與MS .NET SDK的csc編譯器相似,mcs也有很多命令行選項
。上面的命令將生成可執行文件HelloMono.exe。注意這個執行文件不是Linux執行文件,
而是一個.NET執行文件,或者說,這個文件的可執行代碼形式是中間語言(IL,Intermed
iate Language)。要運行這個執行文件,必須執行如下命令:
mono HelloMono.exe
Linux控制台上將顯示出 "Hello Mono "。關於mcs和Mono的更多說明,請執行man mcs或man
mono參考其man文檔。
GUI應用
Mono不支持Windows Forms,但在C#編程中可用GTK #編寫GUI。GTK #是GTK+圖形庫的C#支
持工具,可從下載。下載完成後,先要安裝RPM:
rpm -Uvh *.rpm --nodeps
解開gtk-sharp-0.2.1.tar.gz:
tar -zxvf gtk-sharp-0.2.1.tar.gz
進入子目錄gtk-sharp-0.2.1,執行:
./configure --prefix=/usr
make
make install
完成這一步驟之後,重新啟動一次。與GTK#有關的所有動態代碼模塊(gtk-sharp.dll、a
tk-sharp.dll、gdk-sharp.dll、glib-sharp.dll以及pango-sharp.dll)都會被復制到/u
sr/lib目錄,編譯用GTK#製作GUI的C#程序時,必須通過-r參數引用它們。GTK#下載包中包
含了幾個示常式序,如HelloWorld.cs、Menu.cs、ButtonApp.cs等。編譯這些文件的命令
如下:
mcs -r gtk-sharp -r glib-sharp HelloWorld.cs
mcs -r gtk-sharp -r glib-sharp -r System.Drawing Menu.cs
mcs -r gtk-sharp -r glib-sharp -r System.Drawing ButtonApp.cs
下面來看看如何通過-r選項引用前面各個.dll動態模塊。執行startx命令啟動X Window,
進入終端窗口,再進入示常式序所在目錄,執行下面的命令分別運行各個程序:
mono HelloWorld.exe
mono Menu.exe
mono ButtonApp.exe
Mono項目還在完善和發展之中,還沒有移植好全部.NET類。但不管怎樣,它對許多人來說
將是一個好消息。有關Mono C#類庫移植進展的信息,請訪問
tus.html。
考慮一個典型的伺服器/客戶機式.NET應用:最終用戶只與客戶端打交道,客戶端最好是方
便的GUI應用,許多人還會希望使用熟悉的Windows平台。但是,對於他們來說,伺服器端
使用Windows還是Linux完全無關。所以,伺服器端可以用帶有Mono的Linux構造,節省了配
備專用Windows伺服器的投資。Mono也將為應用遷移帶來方便。如果Mono能夠順利發展,W
indows開發者也將能夠為Linux或其他非Windows平台開發應用。如果這樣的話,不久之後
出現一個類似Visual Studio .NET但免費或廉價的Linux開發IDE也說不定。
然而,所有這一切是否能夠成為現實,依賴於Mono是否能夠茁壯發展,也依賴於Mono與Wi
ndows平台上的.NET框架兼容或相似程度。另外一些因素也很關鍵,例如Mono的性能、GUI
的友好程度等。
差不多的東西其實就是我講出來的,你仔細看下哈。正確的

Ⅱ GTK+ 基礎,第 2 部分: 如何使用 GTK+

本文假設讀者熟悉基本的面向對象概念,比如類、對象、方法和繼承。雖然不需要能夠用 C 編寫程序,但是需要對 C 語言的語法有基本的理解。C 語言的 GTK+ 應用程序剖析我發現最好用示例來討論代碼。對於本文來說,我使用一個用 C 編寫的名為 Hello World 的簡短應用程序。雖然短小 —— 而且作為應用程序來說,基本沒什麼用 —— 但是這個應用程序的代碼確實展示了在進行 GTK+ 編程時可能會碰到的一些最有趣的概念(參見清單 1)。清單1. Hello World 應用程序的 GTK+ 代碼 #include <gtk/gtk.h> #include <libintl.h> #define _(x) gettext (x) #define N_(x) (x) #define GETTEXT_PACKAGE "gtk-hello" #define LOCALEDIR "mo" static char *greetings[] = { "Hello World", "Witaj ?wiecie", "世界に今日は" }; static char* choose_greeting () { return greetings[g_random_int_range (0, G_N_ELEMENTS (greetings))]; } static void cb_button_click(GtkButton *button, gpointer data) { GtkWidget *label = GTK_WIDGET(data); g_assert(label != NULL); gtk_label_set_text(GTK_LABEL (label), choose_greeting()); } static gboolean cb_delete(GtkWidget *window, gpointer data) { gtk_main_quit(); return FALSE; } int main (int argc, char *argv[]) { GtkWidget* window, *button, *label, *vbox; bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); gtk_init(&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); button = gtk_button_new_with_label (_("Hello World")); label = gtk_label_new (choose_greeting()); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER (window), vbox); gtk_container_add(GTK_CONTAINER (vbox), label); gtk_container_add(GTK_CONTAINER (vbox), button); g_signal_connect(G_OBJECT (window), "delete-event", G_CALLBACK(cb_delete), NULL); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_button_click), label); gtk_widget_show_all(window); gtk_main(); return 0; }概述在進入細節之前,先看看運行 Hello World 程序時發生的情況:初始化 GTK+ 和國際化(i18n)支持。創建部件(widget)。部件被組織成層次結構,讓 GTK+ 知道如何在屏幕上顯示它們。兩個信號處理器被連接起來 —— 一個用來在用戶關閉窗口時退出應用程序,另一個用來在用戶點擊按鈕時,修改顯示的歡迎信息。在屏幕上顯示窗口,應用程序調用 gtk_main(),激活主循環。主循環一直運行,直到用戶關閉窗口,調用 gtk_main_quit() 時才結束。初始化以下幾行初始化 GTK+ 和 i18n 支持:清單2. 初始化 GTK+ 和 i18n 支持 int main (int argc, char *argv[]) { GtkWidget* window, *button, *label, *vbox; bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); gtk_init(&argc, &argv); C 程序員應當熟悉 main 聲明。(如果不是 C 程序員,那麼只需要知道這是應用程序開始執行的函數。)下一行包含幾個到 GtkWidget 類型的指針的聲明。GTK+ 是一個面向對象的工具包。所以,它使用常見的面向對象概念(例如繼承)來實現不同的部件。作為語言,C 缺乏對面向對象的內置支持。GTK+ 通過使用一些更聰明的技巧和 C 標准要求的一些有幫助的屬性,克服了這個缺點。在這個方案中,對象由指針代表,而 GtkWidget 是GTK+ 層次結構中的基本類型 —— 叫做 類,其他類都從它派生而來。所以,我把變數聲明為 GtkWidget*。下三行是在程序開始的地方應當包含的調用,用來得到國際化介面的支持。注意,在真實的應用程序中,不會手動聲明 LOCALEDIR 和GETTEXT_PACKAGE。編譯系統將會處理這些聲明。但是,在這個簡單示例中,聲明有助於澄清需要的內容。最後一行調用 gtk_init()。在進行其他 GTK+ 調用之前,必須調用這個函數,並把調用程序使用的參數傳遞給它。如果這個調用失敗,就會從沒有機會正確初始化自己的各個子系統得到多個錯誤消息。創建部件這四行分別調用不同的 _new() 函數:清單3. 調用不同的 _new() 函數 window = gtk_window_new (GTK_WINDOW_TOPLEVEL); button = gtk_button_new_with_label (_("Hello World")); label = gtk_label_new (choose_greeting()); vbox = gtk_vbox_new(FALSE, 0); 關於TOPLEVEL 的警告在看到 gtk_window_new 的TOPLEVEL 參數之後,可能想知道是否有其他可能的窗口類型。實際上,確實有。但是,對於 TOPLEVEL 之外的類型的需要很少見。而且,要使用不同的類型,必須對 GTK+ 與窗口系統的交互方式有很好的理解。所以,規則很簡單:一直 使用TOPLEVEL 參數。正如您所想,這些函數創建新的部件。所以,它們是代表部件的對象的構造函數。在 C++ 中,用特殊的方式標記構造函數,並用特殊語法進行調用。但是,因為 C 不支持面向對象,所以它們與普通的函數沒有什麼不同。只有添加到函數名尾部的 _new() 才表示這些函數實際上是構造函數。規定是:gtk_* 名稱空間中的每個構造函數都返回一個到 GtkWidget 的指針。這樣,通過聲明這種類型的變數,可以直接把構造函數調用的結果分配給對應的變數。如果查看單獨的構造函數,可以看到它們接受不同的參數,對應著它們創建的部件的類型。具體來說,gtk_window_new (GTK_WINDOW_TOPLEVEL) 創建新的 TOPLEVEL 窗口;也就是與用戶看成窗口的東西對應的部件,具有標題欄、關閉按鈕或者窗口系統添加的其他元素。對label 和button 的構造函數的調用做的工作正如您所料。但是,請注意傳遞給 button 的字元串周圍的下劃線和括弧(_())。這個宏調用 gettext() 常式,並且對於界面轉換至關重要。(關於 gettext 的更多信息,請參閱 參考資料。) 模樣古怪的 gtk_vbox_new(FALSE, 0) 創建垂直框(VBox)。雖然這個部件與屏幕上的任何可視像素都不對應,但是它在 GTK+ 的控制項布局中扮演著重要角色,您很快就會看到這一點。 決定布局這三行決定部件的布局: gtk_container_add(GTK_CONTAINER (window), vbox); gtk_container_add(GTK_CONTAINER (vbox), label); gtk_container_add(GTK_CONTAINER (vbox), button); 這些行是對類型 GtkContainer 的面向對象方法的調用。如果查看應用程序編程介面(API)參考,可以看到 GtkContainer 繼承自 GtkWidget,而且它的全部方法都接受 GtkContainer* 作為第一個參數。所以,GtkContainer* 是方法要在上面操作的對象實例。因為變數是 GtkWidget* 類型的,而且 C 編譯器不支持面向對象繼承,所以需要讓編譯器相信:向需要 GtkContainer* 的函數傳遞這些變數是安全的。GTK_CONTAINER() 宏通過實現到類型安全版 GtkContainer 的類型轉換做到了這一點。類型安全 意味著宏在進行類型轉換之前,會驗證指定操作可以在指定類型上安全地執行。如果宏不能執行指定操作,就會提供警告。因為GTK+ 使用方框布局 模型,所以不必顯式地指定部件應當放在屏幕上的什麼位置。相反,要指明部件放在其他哪個窗口部件內。在 Hello World 應用程序中,每個 gtk_container_add() 方法調用都告訴應用程序用第一個參數(或 雙親部件),並把第二個參數(或 子部件)放在雙親部件內。在這個示例中使用的 VBox 部件是一種布局部件,它垂直地排列子部件。這樣,在它內部放置標簽和按鈕時,結果就是按鈕顯示在標簽下。這是需要做的全部工作。如果您曾經用過絕對定位(在某些工具包中使用的模型,例如 Win32)手動調整部件或重新設置部件大小,那麼您會很高興知道在 GTK+ 中所有這些都是自動完成的。連接信號和主循環在創建並組織好部件之後,該給它們添加些邏輯了。GTK+ 像多數 GUI 工具包一樣,是一個事件驅動框架。所以,它是圍繞主循環 組織的。主循環在連續的檢查-分配-睡眠周期上操作。當事件發生時,與這個事件對應的對象發出信號,通知主循環事件已經發生。然後主循環查詢自己的信號和處理程序之間的內部映射表,也叫做 回調,並調用注冊到指定對象的指定信號的處理程序。在Hello World 代碼中,回調的注冊看起來像這樣:清單4. 回調的注冊 g_signal_connect(G_OBJECT (window), "delete-event", G_CALLBACK(cb_delete), NULL); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(cb_button_click), label); 請注意在 GTK+ 中,connect(連接) 到信號。第一行把 cb_delete 函數連接到 window 對象的 delete-event 信號。類似地,第二行把 cb_button_click 函數連接到 button 對象的 clicked 信號。請注意在第二個連接調用中的第四個參數 label。稍後會看到它在 cb_button_click 函數中是如何使用的。下面是 cb_delete 函數,它在用戶關閉窗口時退出應用程序: static gboolean cb_delete(GtkWidget *window, gpointer data) { gtk_main_quit(); return FALSE; } static 修飾符 在C 中,static 關鍵字在內部鏈接函數,這意味著靜態函數在聲明它的源文件之外不可見。除非需要在不止一個文件中使用回調,否則請一直使用 static 關鍵字聲明回調。使用這個方法,可以避免把可用函數名稱的有限名稱空間弄混亂。因為靜態函數被局限在一個文件,所以可以安全地重用函數名稱。 這個函數接受 GtkWidget* 和一個未指定的 data 指針(gpointer 是等價於 void* 的類型),因為 "delete-event" 的每個回調都必須符合這個原型。但是,這個函數不需要這些參數,所以它們被忽略了。它調用 gtk_main_quit() 常式以退出主循環。而且,該函數返回布爾值,因為為 GtkWidget 定義的 delete-event 信號的回調原型指明的是布爾返回值。布爾值決定 GTK+ 採取的行動。如果它返回 TRUE 值,那麼事件就被認為已經得到處理,而且不調用默認處理程序(該默認處理程序從窗口系統刪除部件)。有的時候,例如,如果想顯示一條消息,請求尚未保存的數據,並根據用戶的響應阻止窗口關閉,那麼這個函數會很有用。下面是 cb_button_click 函數,在用戶點擊按鈕時,它修改顯示的歡迎信息:清單5. cb_button_click 函數 static void cb_button_click(GtkButton *button, gpointer data) { GtkWidget *label = GTK_WIDGET(data); g_assert(label != NULL); gtk_label_set_text(GTK_LABEL (label), choose_greeting()); } 可以看到,這個函數與 cb_delete 函數類似,不同之處是它什麼也不返回,而且它接受 GtkButton* 而不是 GtkWidget。代碼把 data 轉換成到 GtkLabel 的指針。還記得在回調注冊中的 label 參數么?現在每次調用回調時,data 指針都會包含到那個標簽的指針。每當需要向回調傳遞額外的信息時,都可以使用 data 參數。類似地,如果需要訪問發出信號的對象,就要使用第一個參數,在這個具體回調中是 button。在得到標簽的指針後,代碼使用 g_assert 宏來確定標簽是否等於 NULL。g_assert 宏是一個來自 Glib (GTK+ 使用的一個有用的 C 類型和常式庫)的工具宏,如果傳遞給它的條件滿足,就會中止程序 —— 在這個示例中,條件是 label 等於NULL。因為 label 等於NULL 意味著程序員犯了錯誤,所以這可以確保在代碼投入生產之前捕獲到錯誤。顯示窗口在回調連接好之後,gtk_widget_show_all() 函數使窗口 —— 即所有的部件 —— 都顯示在屏幕上(參見圖 1)。圖1. Hello World 應用程序,用波蘭語和日語運行激活主循環當諸事就位,而且顯示出來之後,gtk_main() 函數就激活主循環。主循環進入無限循環,等候事件並調用回調,直到有人關閉窗口,調用 gtk_main_quit() 為止。注意:如果對代碼仍有問題,請參閱附帶的源代碼。它與文章中介紹的代碼完全相同,但是每一行都包含詳細的注釋。編譯和運行要編譯這個程序,需要 C 編譯器和 GTK+ 的開發文件(頭和庫)。有關如何獲取這些項目的信息,請參閱 參考資料。在安裝完文件之後,請解壓源代碼,進入源代碼將要解壓到的目錄,並運行 make: $ tar -xzf gtk_hello.tgz $ cd gtk_hello $ make 注意:如果正在運行 Microsoft�0�3 Windows�0�3,請不要運行 make,而是打開 Microsoft Visual Studio�6�4.NET 並運行 「hello」 項目。回頁首在其他編程語言中的 GTK+可以在多個編程語言中使用 GTK+。要做到這點,需要使用綁定。綁定 是針對指定語言的特殊包,它用適合該語言的方式公開 GTK+ API。例如,我已經把 Hello World 應用程序轉換成 Python 和 C#。要在這些語言中運行 GTK+,除了 Python 和 Mono/.NET 之外,分別還需要 PyGTK 和 Gtk#(請參閱 參考資料)。PyGTK 中的 Hello World 清單6 顯示了轉換成 Python 的 Hello World 應用程序的代碼。清單6. PyGTK 中的 Hello World 應用程序 import pygtk pygtk.require('2.0') import gtk import random greetings = ["Hello World", "Witaj ?wiecie", "世界に今日は"] def choose_greeting (greets): return greets[random.randint (0, len(greets) - 1)] def cb_clicked(button, label): label.set_text(choose_greeting(greetings)) window = gtk.Window () vbox = gtk.VBox () button = gtk.Button("Hello World") label = gtk.Label (choose_greeting (greetings)) window.add(vbox) vbox.add(label) vbox.pack_start(button, False, False) window.connect("delete-event", lambda a,b: gtk.main_quit()) button.connect("clicked", cb_clicked, label) window.show_all() gtk.main() 由於緊湊的 Python 代碼,應用程序的這個版本比它的 C 語言對應物更短。除此之外,看起來是相似的。注意,代碼被轉換成使用 Python 的習慣,但是 API 保持不變。Gtk# 中的 Hello WorldGtk# 中的 Hello World 應用程序代碼要比 C 版本略長,因為 C# 要求的聲明很長。所以,我沒有在這里包含完整的源代碼。源代碼包含在附加的下載中。下面快速查看一下 C 到 C# 的主要概念轉換: class GtkHello : Gtk.Window { 現在不再創建並設置新窗口,而是把 Gtk.Window 類放進一個子類,並把所有設置代碼移動到構造函數。這種方法並非特定於 Gtk#。實際上,在 C 程序中,當需要窗口的多個拷貝時,經常使用這種方法。但是,在 C# 中使用子類如此之容易,所以即使對一個實例這么做也有意義 —— 特別是在考慮到 C# 要求至少聲明一個類的時候,更是如此。 this.DeleteEvent += new DeleteEventHandler(DeleteCB); button.Clicked += new EventHandler(ButtonClickCB); 可以看到,GTK+ 信號被轉換成地道的 C# 事件概念。名稱也被稍加修改,以更好地符合 C# 的命名規范。清單7. GTK+ 信號被轉換成地道的 C# 事件概念 private void DeleteCB (object o, DeleteEventArgs args) { Application.Quit (); args.RetVal = true; } 由於C# 事件的構造方式,所以 delete-event 處理程序的原型略有不同。它不是從回調返回 true,而是通過 args.RetVal 傳遞返回值。gtk_main() 和gtk_main_quit() 分別被 Application.Run() 和Application.Quit() 代替。回頁首有用的工具在使用 GTK+ 進行開發時,有幾個工具可以讓工作輕鬆些。其中最著名的幾個工具是 Glade、Libglade 和 Devhelp。Glade 和 LibgladeGlade 是一個界面構建器 —— 這個程序可以圖形化地構建應用程序,而不必手動從源代碼開始構建。更重要的是第二個組件:Libglade。顧名思義,Libglade 支持讀取可擴展標記語言(XML)格式,Glade 用 XML 保存用戶界面描述。使用 Libglade,可以直接從這個描述構建應用程序的界面,而不需要任何代碼。圖2 顯示了一個包含幾個部件的簡單的 Libglade 應用程序。圖2. 簡單的 Libglade 應用程序清單8 顯示了圖 2 所示的 Libglade 應用程序的完整源代碼。清單8. Libglade 應用程序的源代碼 #include <gtk/gtk.h> #include <glade/glade.h> int main (int argc, char *argv[]) { GladeXML *ui; gtk_init(&argc, &argv); /* Read user interface description from glade file */ ui = glade_xml_new ("glade_hello.glade", "main_window", NULL); /* Automatically connect signals */ glade_xml_signal_autoconnect(ui); gtk_main(); return 0; } 可以看到,所有的事情只有 17 行代碼,包括注釋和空行。雖然真正的應用程序不會這么短,但是從代碼的清晰性、模塊性和可管理性來說,Libglade 帶來了巨大的提高。如果想進一步研究這個程序是如何構建的,可通過本文附帶的下載中其餘的示例進行了解。DevhelpDevhelp 是一個文檔瀏覽器,是為了閱讀用 gtk-doc 生成的格式的文檔而設計的,gtk-doc 是構建 GTK+ 文檔的標准工具,相關的項目,例如 Pango 和 GNOME 也使用它。使用 Devhelp,可以迅速地搜索函數索引並瀏覽已經安裝的文檔,從而可以更迅速地獲得需要的信息。Devhelp 是一個 GNOME 應用程序。所以,要運行它,需要一個符合 POSIX 的操作系統,在上面運行 GNOME,例如 Linux�0�3 或 Sun Solaris,還需要 GNOME 運行時庫。不需要運行 GNOME 本身。如果使用其他平台,也有許多其他方法可以閱讀 GTK+ 文檔。Mono 項目有 Monodoc 瀏覽器,它通常是與 Gtk# 參考一起預先裝入的。GTK+ 的 Windows 安裝器也通常包含適合各種開發工具的文檔格式,例如 Visual Studio�0�3。最後,總有使用 Web 瀏覽器在線閱讀文檔這個選項,但是推薦採用專用瀏覽器,因為它的速度快,還有針對在程序文檔中進行搜索而設計的額外特性。下期預報在這篇文章中,學習了 GTK+ 編程中使用的基本概念。還看到了如何在 C 語言之外的語言中使用 GTK+,在保持使用 GTK+ 的一般方式的同時,還使用了特定於這些語言的方式。最後,還介紹了有助於更快更好地開發應用程序的工具。在本系列的最後一期中,將進一步觀察 GTK+ 開發的另一個方面:部署。文章將詳細分析各種選項,包括移植性的考慮和安裝的簡易。最後,將以更廣闊的視野來看 GTK+ —— 作為一個有活躍社區的項目,它有助於構建出更好地為用戶服務的應用程序。回頁首下載描述名字大小下載方法Source codeos-gtk2_hello.zip18KBHTTP關於下載方法的信息參考資料 學習您可以參閱本文在 developerWorks 全球站點上的 英文原文。 請閱讀 developerWorks 「GTK+ 基礎」 系列中的全部文章。 GNU Gettext 是一個用於應用程序運行時轉換的庫。 Libglade Reference Manual 是用來動態創建 GTK+ 界面的庫。 請訪問 GTK+ 獲得關於工具包的更多信息。 全面的 GTK+ API Documentation 對於所有開發人員都很重要。 Matthias Warkus 編寫的 The Official GNOME 2 Developer's Guide(No Starch Press,2004 年)介紹了 GNOME 2,包括使用 GTK+ 進行編程。 請訪問 developerWorks 開放源碼專區 獲得豐富的 how-to 信息、工具和項目更新,幫助您用開放源碼技術進行開發並把它們用於 IBM 的產品。 獲得產品和技術 請獲取 Gtk#,這是針對 Microsoft .NET 環境的 GTK+ 綁定。 請獲取 GTK+ 的官方 source code tarballs。 請訪問 PyGTK,這是 Python 的 GTK+ 綁定的官方站點。 Gazpacho 是Glade UI 描述文件的改進的編輯器,是用 PyGTK 編寫的。 Devhelp 是用於 GNOME 的一個面向程序員的文檔瀏覽器。 請參閱 GNOME,這是使用 GTK+ 構建的側重於應用的桌面。 請嘗試 Xfce,這是一個快速而易用的桌面,也是用 GTK+ 開發的。 請訪問 Gnomefiles 並得到超過 1,000 個用 GTK+ 構建的應用程序。 請用IBM 試用軟體 改造您的下一個開放源碼開發項目,這些軟體可以下載也可以通過 DVD 得到。 討論 請在GTK+ mailing lists 上獲得關於用 GTK+ 開發軟體的支持並詢問相關問題。 通過參與 developerWorks blogs 加入developerWorks 社區。 關於作者Maciej Katafiasz 是計算機科學專業的研究生,從高中起就一直使用開放源碼技術。從 GNOME 1.0 起,他就是 GNOME 桌面的用戶,而 2.0 版一發布,他就愛上了它並了解到 GTK+ 能夠開發自己喜歡的桌面。關閉[x]關於報告濫用的幫助報告濫用謝謝! 此內容已經標識給管理員注意。關閉[x]關於報告濫用的幫助報告濫用報告濫用提交失敗。 請稍後重試。關閉[x]developerWorks:登錄IBM ID:需要一個 IBM ID?忘記IBM ID?密碼:忘記密碼?更改您的密碼 保持登錄。單擊提交則表示您同意developerWorks 的條款和條件。 使用條款 當您初次登錄到 developerWorks 時,將會為您創建一份概要信息。您在developerWorks 概要信息中選擇公開的信息將公開顯示給其他人,但您可以隨時修改這些信息的顯示狀態。您的姓名(除非選擇隱藏)和昵稱將和您在 developerWorks 發布的內容一同顯示。所有提交的信息確保安全。關閉[x]請選擇您的昵稱:當您初次登錄到 developerWorks 時,將會為您創建一份概要信息,您需要指定一個昵稱。您的昵稱將和您在 developerWorks 發布的內容顯示在一起。昵稱長度在 3 至 31 個字元之間。 您的昵稱在 developerWorks 社區中必須是唯一的,並且出於隱私保護的原因,不能是您的電子郵件地址。昵稱:(長度在 3 至 31 個字元之間)單擊提交則表示您同意developerWorks 的條款和條件。 使用條款. 所有提交的信息確保安全。為本文評分評論回頁首

閱讀全文

與pango的編譯安裝方法相關的資料

熱點內容
精品php源碼 瀏覽:960
自己編寫雲伺服器搶紅包 瀏覽:203
java解壓縮文件加密 瀏覽:887
dlink列印伺服器默認地址 瀏覽:353
php休眠函數 瀏覽:372
金蝶如何打開伺服器 瀏覽:766
e4a手游輔助源碼 瀏覽:777
什麼app可以實時直播 瀏覽:106
蘋果13的app閃退什麼原因 瀏覽:775
尾盤選股源碼公式 瀏覽:450
php日期運算 瀏覽:931
天龍八部長歌伺服器什麼時候開的 瀏覽:199
鬼泣4模型在那個文件夾 瀏覽:229
單片機的串列口 瀏覽:58
phpjson轉化為數組 瀏覽:268
pdf導入excel 瀏覽:428
蘋果xsmax信任app在哪裡設置 瀏覽:53
自動外鏈php源碼 瀏覽:245
我的世界新手獎勵箱命令 瀏覽:146
linux更新vim 瀏覽:998