今天,開始在工作之余,抽出時間來學習linux界面編程。我計划在未來的半年內,學會 linux下的GTK+界面編程。這個文檔作為我學習linux編程的第一個文檔,我會盡量做的詳 細一點。我所用的linux版本是Red Hat 9.0。
第一個程序——Hello,World
在開始寫第一個程序之前,需要做一點基本操作。
我登陸linux使用的是root用戶(根用戶,也叫超級用戶)。所以,所有筆記中產生的截圖,均是root用戶下的。
一、在linux桌面點擊右鍵,在快捷菜單中選擇“新建終端”選項,打開類似DOS的窗口。
二、使用mkdir命令創建一個文件夾,文件夾命名為gtkgui,命令輸入為:mkdir gtkgui
輸入完畢后敲回車鍵即可創建目錄gtkgui,需要注意的是該目錄的路徑是:/root/gtktui
三、使用cd命令進入目錄gtkgui 命令輸入:cd gtkgui
輸入命令后敲回車鍵即可進入目錄gtkgui
四、創建第一個程序存放的目錄,和第一步一樣,這次在gtkgui目錄下創建一個子目錄1gui 然后進入1gui目錄。創建目錄命令:mkdir 1gui 進入目錄命令:cd lgui 命令界面輸入。
(注意1gui第一個字符是“一”,不是小寫的L)。
小提示:若你想查看當前目錄的絕對路徑。可以在終端敲入命令:pwd
現在可以清楚的看到當前工作目錄是“/root/gtkgui/1gui”。
五、編寫代碼,在開始寫第一個程序之前,說說VI編輯器。假設要寫的程序是firstgui.c,則在終端中敲入 vi firstgui.c 然后回車,就進入編輯文件firstgui.c狀態了,VI命令后面的文件若存在,則直接打開,若不存在,則新建一個。進入文件編輯狀態后,必須按a鍵, 才可向文件輸入東西,當編輯完后,按esc鍵退出編輯模式,再按shift+;鍵,最后輸入wq(write and quit)退出 VI。好了,在寫程序中,再說一遍就記住了。
1、 創建 firstgui.c並編輯它
命令:vi first.c 然后敲回車進入編輯模式
必須先按下 a 鍵(還有其他的鍵也可(如i鍵),不過我覺得按下a鍵比較方便)才可輸入字符,現在按一下a鍵,終端變成圖1.8所示的效果。
按一下a鍵后(注意左下方有個--插入--),進入編輯模式
現在開始輸入第一個程序的代碼,代碼原型如下:
- #include <gtk/gtk.h>
- int main(int argc,char*argv[])
- {
- GtkWidget *window;
- gtk_init(&argc,&argv);
- window=gtk_window_new(GKT_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window),”Hello,World”);
- gtk_widget_show(window);
- gtk_main();
- return 0;
- }
現在代碼輸入完畢,需要保存文件並推出編輯器,先按一下esc鍵退出編輯模式,然后按組合鍵:shift+;鍵 最后輸入wq並敲回車鍵就保存了文件並退出編輯模式了。退出VI后的界面如圖1.20所示。
使用ll命令(小寫的LL)查看剛才編寫的firstgui.c是否存在。
若想看文件內容,使用cat firstgui.c 命令就可看到文件firstgui.c的內容了。
六、編譯代碼
在終端敲入下列命令及參數,編譯連接程序
命令及參數:gcc firstgui.c -o firstgui `pkg-config --cflags --libs gtk+-2.0`
命令說明: gcc 編譯命令
firstgui.c 源程序文件名
-o 編譯參數,(不是0(零),是opq的o)
firstgui 編譯連接后的可執行文件名,可以為任意合法的文件名
` 這個符號是和~呆在一起的那個鍵上,不要誤認為是單引號‘
pkg后面與-config之間沒有空格
cflags 前面是兩個短線 --
libs前面也是兩個短線 --
七、運行程序
鍵入 ./firstgui 后回車便可看到效果了。
需要注意的是,該程序當你點擊窗口右上角上的小X關閉窗口時,窗口倒是關閉了。但是程序還在運行,你必須在終端下按組合鍵:Ctrl+c來關閉進程。
八、程序分析
GtkWidget *window; 相當於Windows下的
WNDCLASS
結構體,不過window在此只是一個窗口指針,用於指向函數gtk_window_new()函數返回的窗口地址而已。
gtk_init(&argc,&argv);
初始化界面庫等一系列操作的函數,當其調用失敗時,其將終止我們的程序,目前只要記住在編寫任何窗口函數之前,都保證該函數是第一個被調用的就行了。
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
該函數創建一個新的GtkWidget對象(目前我認為其就是創建了一個還沒有顯示的窗 口),並返回該對象的指針。該函數參數僅有兩個,其中一個是上面的GTK_WINDOW_TOPLEVEL,表示創建一個“主窗口”,另一個則是 GTK_WINDOW_POPUP,表示創建一個彈出窗口。
gtk_window_set_title(GTK_WINDOW(window),”Hello,World”);該函數設置窗口的標題。
gtk_widget_show(window); 該函數將窗口顯示出來。
gtk_main();該函數捕獲一些消息吧。在沒有調用函數gtk_main_quit()函數之前,即使你關閉窗口,進程也不關閉的原因就在此。
八、總結
創建窗口主要步驟:
1、GtkWidget *window;
2、gtk_init(&argc,&argv);
3、windows=gtk_window_new(GTK_WINDOW_TOPLEVEL);
4、gtk_widget_show(window);
5、gtk_main();
最后,注意編譯命令。后面的那些參數。
目前,X窗口(Xwindow)和GNU編譯系統已成為應用linux或unix操作系統的計算機工作站和大型計算機上最主要的圖形用戶界面系統。而GTK正是兩者結合的編程開發包,它比以往用的Xwindow/Motif編程更為簡單方便,功能也很強大。所以,我想會有着較好的應用前景。這是我的心得體會,希望能夠對大家有所幫助!